这是我的工厂:
.factory('userService',()){ var user = {}; return { getFirstname : function () { return user.firstname; }, setFirstname : function (firstname) { user.firstname = firstname; } }
我在两个控制器MainCtrl和AccountEditCtrl中使用此服务,在MainCtrl中使用getFirstname(),在AccountEditCtrl中使用setFirstname
.controller('MainCtrl',['userService', function(userService){ $scope.userName = userService.getFirstName(); }]); .controller('AccountEditCtrl',['userService', function(userService){ userService.setFirstname("New First Name"); }]);
我的问题是,当我使用userService.setFirstname()时,$ scope.userName不会在MainCtrl中更改。
在某些情况下,$ watch无法使用工厂对象。比起您可以使用事件进行更新。
app.factory('userService',['$rootScope',function($rootScope){ var user = {}; return { getFirstname : function () { return user.firstname; }, setFirstname : function (firstname) { user.firstname = firstname; $rootScope.$broadcast("updates"); } } }]); app.controller('MainCtrl',['userService','$scope','$rootScope', function(userService,$scope,$rootScope) { userService.setFirstname("bharat"); $scope.name = userService.getFirstname(); $rootScope.$on("updates",function(){ $scope.name = userService.getFirstname(); }); }]); app.controller('one',['userService','$scope', function(userService,$scope) { $scope.updateName=function(){ userService.setFirstname($scope.firstname); } }]);
这是一个有效的例子