【发布时间】:2013-12-28 00:05:25
【问题描述】:
在我的多用户 AngularJS 应用程序中,我的作用域上有一个模型对象。这个模型可以通过用户输入和服务器更新来操作。
我有一个 $watch 观察者来跟踪模型并更新 UI。是否可以从我的 $watch 函数中确定我的模型更新的来源/原因?如果没有该检查,我会遇到反馈循环问题(例如 UI→Server→UI)。
更新:一些代码
控制器:
$scope.elementProperties = { left: 0 };
$scope.$watch('elementProperties.left', function(newVal, oldVal) { changeSelectedElementProperty('left', newVal, oldVal); } );
指令:
angular.module('myapp.ui-editor').directive('myappPropertiesPanel', function () {
return {
templateUrl: 'views/ui-editor/myappPropertiesPanel.html',
restrict: 'A',
scope: { elementProperties: '=' },
link: function postLink (scope, element, attrs) {
scope.$watch('elementProperties.left', function(newVal, oldVal) { console.log('PropertiesPanel change left', newVal, oldVal); } );
}
};
});
【问题讨论】:
-
当数据来自服务器/用户界面时,你不能设置一些标志吗?
-
你能举个例子吗?标记是有意义的,或者使用广播事件可能会有所帮助
-
或者在elementProperties上设置一个新属性,包含最后的变化源
-
但是我如何检测更改是否发生在 UI 中(例如
myappPropertiesPanel指令)?scope.$watch似乎按照它们发出的顺序触发,因此控制器$watch语句在指令之前触发。
标签: javascript angularjs angularjs-scope