角度如何使用示波器从不同的控制器

问题描述:

我有一个user.list.ctrl和一个user.detail.cntr。所有的控制器都是作为一个模块构建的,并且注入到我在app.js中注入的“用户模块”中。 (见的完整代码在下面的plunker)角度如何使用示波器从不同的控制器

我的控制器模块

angular.module('user-module', ['user-module.controllers']); 

我的用户模块

angular.module('demo.app', ['user-module']); 

在两个控制器我注入用户FCTR与来自REST工厂数据。 (效果很好)

user.list.cntrl有$ scope.refresh() user.detail.cntrl有$ scope.update()

user.list.cntrl

    1. 当我输入一条新记录时,我调用$ scope.refresh(),以便刷新列表。 (这是工作的罚款)

user.detail.cntrl

    1. 当我从单击列表中的用户,在不同的视图中用户详细信息负载(工作正常)
    1. 开始=>
    2. 当我更新user.detail,我想呼叫$ scope.refresh()来更新user.list,但它不工作。我不能叫$ scope.refresh()

    我想,既然我注入相同的工厂到两个控制器我可以使用对方的$范围。

    如何,我可以用$ scope.refresh()(或更新的列表,当我更新user.detail.js)

    我做一个plunker所有的js文件的任何提案(plunker不功能,它只是表明我的代码) http://plnkr.co/edit/HtnZiMag0VYCo27F5xqb?p=preview

    感谢名单采取看看这个

    我落得这样做的:

    我在list.contrl添加了这个:

    factoryId.listScope = $scope; 
    

    ,因为我已经有factoryId在细节控制器注入(我的数据服务),我可以打电话这个:

    factoryId.listScope.refresh(); 
    

    它的工作原理,但我不知道这是否是最好的方法。任何意见?

    这是一个非常概念性的问题。

    您已经为每个“视图”创建了一个控制器,因为它们适用于不同的活动。这是控制器的目的。这是对的。

    但是,您正尝试在另一个控制器中访问用一个控制器写入的刷新功能。从字面上看,这是错误的,从那时起,刷新不在用户列表控制器或细节控制器内。

    一个函数旨在控制(字面上)在特定视图上发生的事情是一个控制器。 - 你有权利拥有一个控制器列表和一个细节。

    要在控制器之间共享的函数必须是服务。这正是你想要的刷新功能。

    无论何时将相同的工厂注入到n个控制器中,都无法使用每个控制器的范围。这不是控制器的目的。

    但是,无论何时将相同的工厂注入到n个控制器中,都可以使用其公开的方法。

    你有问题,可以如下解决:

    app.factory('sharedFunctions', [ 'factoryId', function sharedFunctions(factoryId) { 
        var refresh = function() { 
        factoryId.getAll(/*your params to query*/) 
        .success(function (response) { 
         //This will return the list of all your records 
         return response; 
        }); 
        }; 
        return sharedFunctions; 
    }]); 
    

    ,注册这家工厂服务,那么你可以把它注入到你的控制器,每当你需要刷新,只需调用的暴露的方法服务并将新信息绘制到视图中。

    希望它适合你!

    +0

    我明白你的意思了。我很有道理。我会尽力回复。谢谢 – user2062455 2014-10-29 21:33:31

    +0

    我试过了,我该如何调用服务的“暴露方法”?请你澄清一下。 thanx再次 – user2062455 2014-10-30 00:33:15