角度如何使用示波器从不同的控制器
我有一个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
-
- 当我输入一条新记录时,我调用$ scope.refresh(),以便刷新列表。 (这是工作的罚款)
user.detail.cntrl
-
- 当我从单击列表中的用户,在不同的视图中用户详细信息负载(工作正常)
-
- 当我更新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;
}]);
,注册这家工厂服务,那么你可以把它注入到你的控制器,每当你需要刷新,只需调用的暴露的方法服务并将新信息绘制到视图中。
希望它适合你!
我明白你的意思了。我很有道理。我会尽力回复。谢谢 – user2062455 2014-10-29 21:33:31
我试过了,我该如何调用服务的“暴露方法”?请你澄清一下。 thanx再次 – user2062455 2014-10-30 00:33:15