首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS暂停$watch进行内部更新

AngularJS暂停$watch进行内部更新
EN

Stack Overflow用户
提问于 2016-01-30 02:52:46
回答 1查看 451关注 0票数 0

我编写了一个指令,它具有双向绑定,为流程图引入文本规范,该流程图用于生成指令中的实际对象(步骤和连接)。我在指令中设置了一个$watch,以允许控制器发送一个新的规范(例如加载一个新的图表),但我也希望该指令能够响应用户的操作(例如删除连接)对规范进行更改,以便控制器能够保存更改的规范。

我在指令中有一个函数,该函数将图表对象转换回文本规范,但是如果我用更新的值替换规范范围变量,原始手表将看到一个更改(它认为它可能来自控制器),因此从规范重新加载图表。这会破坏一些东西,比如拖动元素,因为这些元素将从DOM中移除,并被新的元素所取代。

我想要做的是在进行内部更改时暂时挂起$watch,或者以其他方式避免手表在指令更改时触发,只有当控制器从外部进行更改时才会触发。我试图解除绑定和重新绑定手表进行更改,但因为实际的检查发生在周期的其他地方,但不起作用。我可以使用的另一种解决方案是在控制器和指令之间传递两个变量,每个变量一个,但这有点不雅观。任何更好的建议都将受到欢迎。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-30 05:51:09

当我这样做时,我的$watch通常如下所示:

代码语言:javascript
复制
$scope.$watch('MyVar',function(newval,oldval) {
    if (oldval == newval) return;
    if (newval == $scope.internalval) return;
    // process here
})

这正是你勾勒的原因。我不相信您可以关闭$watch,所以在对被监视的变量进行内部更新之前,我会更新变量的跟踪版本,以确保不会得到无限递归的更改。这似乎很痛苦,但观察到的变量是有限的,我总是使用setter函数,所以更新内部值的代码只编写一次。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35097432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档