我正在寻找一种最佳实践解决方案,以避免使用$scope.$watch
,给出以下用例:
1)directiveA
具有以下isloated范围:
{ sharedModel : '=' }
2)对于它自己的用法,directiveA
需要根据modelA
更改名为sharedModel
的内部状态变量。
3)directiveB
使用directiveA
,并将sharedModel
绑定到modelB
(其内部模型)。
<directive-a
shared-model="vm.modelB" />
4)每当modelB
/ sharedModel
发生变化时,我希望modelA
更新(请记住,modelA
数据仅来自sharedModel
)。
为了完成#4,我可以在$scope.$watch
上添加sharedModel
。 但是,$watch
性能昂贵且无法测试。任何最佳实践建议?
用于实时代码示例see jsfiddle。
请注意我希望替换的第10行的$scope.$watch
。
答案 0 :(得分:4)
在这种情况下,可以在没有额外的昂贵手表的情况下进行。您可以使用旧的ES5属性getters,它会非常有效。所以不要$watch
尝试这样的事情:
Object.defineProperty($scope, 'modelA', {
get() {
return $scope.sharedModel * 10;
}
});