AngularJS:我的范围变量更新但我的视图没有更新。 $ apply,$ timeout,$ evalAsync什么都不做

时间:2014-05-29 23:51:13

标签: angularjs angularjs-directive

我有一个很大的项目。我试图在这个jsfiddle中模拟这个问题的基本设置:http://jsfiddle.net/RkE6H/

基本上,我有一个从控制器A调用的服务来创建一个由控制器B监视的对象,然后由指令选取该对象以在控制器B控制的视图中创建一个选择框。当选择值时更改后,指令应该通知控制器B,控制器B调用对象中的回调,最终返回到控制器A中。(如果这是超级混乱,请查看jsfiddle ......场景在那里复制)

一旦我在控制器A中回叫,我就进行$ http调用以获取数据,我将其推入控制器A的$ scope。数据在所有内容的末尾都在$ scope.mydata中,但控制器A控制的视图不会更新。

我尝试过运行$ scope。$ apply(通常会收到我已经在摘要中间的警告),在$ timeout和$ evalAsync中包含各种内容,使用$ parse来做回调而不是scope.callback,但没有任何作用。如果这还不够糟糕,我尝试在上面的jsfiddle中重新创建一个基本场景,并且jsfiddle工作正常。

我无法弄清楚我做错了什么,但我觉得它与指令有关,这个指令使得选择框以及它如何回电或者如何回复处理程序回调,即使这些操作紧接着是Angular事件(ngChange)。

scope.callback({
  e:{
    type:'selectChange',
    selectedItem:selectedItem
  },
  control:scope.control
});

select.callback.call($("#" + select.id).get(0), e, select);

请帮忙!

1 个答案:

答案 0 :(得分:0)

这个问题是如果服务对象是在运行时在控制器A中构造的,但是b在它存在之前试图链接到它,他将不会注意到发生了更改,而是可以使用getter函数来获取数据或者在你的服务中创建一个空对象,然后在你的控制器中扩展它,这样你就不会破坏绑定