【问题标题】:Data change inside Service does not update the ScopeService 内部的数据更改不会更新 Scope
【发布时间】:2016-02-22 22:58:44
【问题描述】:

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

.factory('DataManager', function($rootScope){ var _json = {init: '来自 DataManager'}; 返回 { json: _json, changeTo: 函数 (newVal) { _json = newVal; console.log("改成", _json); } }; })

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

.controller('MainCtrl', function(DataManager){ var MC = 这个; MC.json = 数据管理器.json; MC.changeTo = 数据管理器.changeTo; })

问题是 - 当MC.changeTo 函数被调用时,它确实更新了服务内部的_json 变量,而不是在控制器中!

这里是JSbin 说明问题。

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

【问题讨论】:

  • 你的愿望是什么?
  • @ShailendraSharma 拥有可扩展的数据存储架构并避免存储在控制器中。
  • 你能不能把它放到plunker,我工作时jsbin被禁用了
  • 你基本上有MC.json = object1 -> changeTo(object2) -> _json = object2

标签: javascript angularjs architecture angularjs-scope


【解决方案1】:

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

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

【讨论】:

  • 运气不好 - 点击会引发错误:jsbin.com/saveme/edit?html,js,output
  • 所以看起来angular.copy 将原始字符串视为索引其字符的对象,所以angular.copy('new', obj) 导致Object {0: "n", 1: "e", 2: "w"},不完全是我想要的。不过,如果newVal 是一个对象,我会工作。无论如何,我的方式确实创建了一个新对象,谢谢!
猜你喜欢
  • 2017-06-23
  • 2016-11-14
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多