服务内部的数据更改不会更新范围

时间:2015-11-20 12:38:11

标签: javascript angularjs architecture angularjs-scope

我将数据存储在Angular服务中(以跨控制器共享)并提供更新它的功能:

.factory('DataManager', function($rootScope){
  var _json = {init: 'from DataManager'};

  return {
    json: _json,

    changeTo: function (newVal) {
      _json = newVal;      
      console.log("Changing to ", _json);
    }
  };

})

然后我只是将数据拉入控制器:

.controller('MainCtrl', function(DataManager){
  var MC = this;

  MC.json = DataManager.json;
  MC.changeTo = DataManager.changeTo;
})

问题是 - 当调用MC.changeTo函数时,它会在服务中更新_json变量,但不在控制器中更新!

以下JSbin说明了问题。

知道我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

试试这个。您的代码不起作用,因为_json变量每次都引用不同的对象。 angular.copy将新对象复制到同一个引用。

 changeTo: function (newVal) {
          angular.copy(newVal, _json);      
          console.log("Changing to ", _json);
        }