在angualrjs工厂获得和设定价值

dev*_*pnd 1 angularjs angular-services

这是我的工厂:

.factory('userService',()){
  var user = {};
  return {

  getFirstname : function () {
    return user.firstname;
  },

  setFirstname : function (firstname) {
    user.firstname = firstname;
  }

}
Run Code Online (Sandbox Code Playgroud)

我在我的两个控制器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");
}]);
Run Code Online (Sandbox Code Playgroud)

我的问题是,当我使用userService.setFirstname()时,$ scope.userName不会在MainCtrl中更改.

Bha*_*han 9

在某些情况下,$ 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);
  }
}]);
Run Code Online (Sandbox Code Playgroud)

这是一个有效的例子