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

标签 javascript angularjs architecture angularjs-scope

我将数据存储在 Angular 服务中(以便在 Controller 之间共享)并提供更新它的功能:

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

  return {
    json: _json,

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

})

然后我只需将数据拉入 Controller 即可:

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

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

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

这里是JSbin说明问题。

知道我在这里做错了什么吗?

最佳答案

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

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

关于javascript - 服务内部的数据更改不会更新范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33826964/

相关文章:

angularjs - ie9中的 Angular ng-click按钮

api - 如何组织API?

visual-studio-2010 - 是否可以使用体系结构资源管理器创建依赖关系图?

java - 调用 JAR 时如何保持内部/隐藏数据库连接打开?

javascript - 如何使用php动态更改html链接的ID?

javascript - angularjs 应用程序在代码连接后无法正常工作

angularjs 应用程序在 ui-select 字段中的占位符文本中不显示特殊字符

javascript - 语义用户界面 : How to prevent form from being submitted when validation fails?

javascript - 对此感到困惑 - 出现错误 "this.myfuntion() is not a function"

javascript - 如何使用 Jest 和 Enzyme 测试组件的条件渲染