angularjs:使用服务在控制器之间通信
我有一个注入控制器的服务。该服务定义了许多功能 现在,我想向该服务添加一个变量,用于在应用程序中保存selectedItem。我是这样做的:angularjs:使用服务在控制器之间通信,angularjs,angularjs-service,Angularjs,Angularjs Service,我有一个注入控制器的服务。该服务定义了许多功能 现在,我想向该服务添加一个变量,用于在应用程序中保存selectedItem。我是这样做的: angular.module('myservices', []). factory('serviceA', function () { var serviceA= { selectedItem: selectedItem, ... more functions here };
angular.module('myservices', []).
factory('serviceA', function () {
var serviceA= {
selectedItem: selectedItem,
... more functions here
};
return serviceA;
var selectedItem;
... functions go here
});
在我的一个控制器中,我设置了所选项目:
serviceA.selectedItem = someItem;
在另一个控制器中,视图参照所选项目,如下所示:
<span>{{serviceA.selectedItem.value}}</span>
{{serviceA.selectedItem.value}
即使selectedItem设置正确,范围也不会更新。我做错了什么
angular.module('myservices', []).factory('serviceA', function () {
return {
////工厂返回一个对象
var serviceA= {
selectedItem: selectedItem,
... more functions here
};
return serviceA;
var selectedItem;
... functions go here
}
});
这行吗?你错过了返回{}部分,所有东西都在那里。如果您要使用服务,您只需编写以下内容。serviceA={…}
控制器中的代码缺少$scope
$scope.someItem= serviceA.selectedItem;
或者(我真的不知道你想要什么)$scope.serviceA.selectedItem=someItem代码>
然后在你的跨度内
<span>{{someItem.value}}</span>
{{someItem.value}
或者(我真的不知道你想要什么){{serviceA.selectedItem.value}
PS我不喜欢您的控制器名称与对象的-serviceA相同要访问视图中的服务,需要将其分配给作用域:
$scope.serviceA=serviceA代码>
啊!我成功了
做:
<span>{{serviceA.selectedItem.value}}</span>
现在一切正常 几天前我用这把小提琴来处理控制器之间的通信:(对不起,我不记得是谁先做的)。此小提琴使用事件来完成($scope.broadcast)。我建议您保留该服务,并在此服务中触发事件我希望避免使用广播。事实上,angularjs中的服务是单例的,这就是为什么我想在控制器之间使用它来共享变量。我只使用广播和发射进行定向这很好。我还更新了演示以检查自己。我已经在你面前发布了我自己的答案。但我会接受你的。谢谢你的帮助!我从来没有这样做过,这是必须的吗?如果没有它,我的代码可以正常工作,我可以从控制器中调用像` serviceA.someFunction()'这样的函数。我只是对selectedItem变量有一个问题。谢谢您的编辑。请看我的答案,因为我需要将服务本身添加到范围中。这样,我可以将视图直接绑定到服务的变量,该变量在控制器之间共享,即:如果一个控制器修改该值,则属于另一个控制器的视图将自动显示更改。不用担心名字,我已经全部更改了,但在我的真实代码中,它们的名字不同。谢谢你的帮助!
angular.module('controllers').controller('someCtrl',
['$scope', 'directDebitService', function ($scope, serviceA) {
$scope.serviceA= serviceA;
}]);