Javascript 如何使用不同控制器的作用域
我有一个user.list.ctrl和一个user.detail.cntr。所有控制器都构建为一个模块,并注入到“用户模块”中,我将其注入到app.js中。(请参阅下面plunker中的完整代码) 我的控制器模块Javascript 如何使用不同控制器的作用域,javascript,angularjs,controller,angularjs-scope,Javascript,Angularjs,Controller,Angularjs Scope,我有一个user.list.ctrl和一个user.detail.cntr。所有控制器都构建为一个模块,并注入到“用户模块”中,我将其注入到app.js中。(请参阅下面plunker中的完整代码) 我的控制器模块 angular.module('user-module', ['user-module.controllers']); 我的用户模块 angular.module('demo.app', ['user-module']); 在这两个控制器中,我向用户Fctr注入来自REST工厂的数
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时,我想调用$scope.refresh()来更新user.list,但它不起作用。我无法调用$scope.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;
}]);
注册此factory服务后,您可以将其注入控制器,并且在需要刷新时,只需调用服务的公开方法并将新信息打印到视图中
希望它对你有用 我最后做了这样一件事:
我在列表中添加了以下内容:
factoryId.listScope = $scope;
由于我已经在细节控制器中注入了factoryId(我的数据服务),我可以将其称为:
factoryId.listScope.refresh();
这很有效,但我不知道这是否是最好的方法。有什么意见吗?我明白你的意思。我说得通。我会努力的,我会发回的。谢谢我试过了,我怎么称呼服务的“暴露方法”?你能澄清一下吗。又来了