[AngularJS 请教] 如何在 directive 中 watch 某 scope 上的所有属性的变化?

2014-02-23 21:35:59 +08:00
 hustlzp
有这样一个需求,我需要写一个A类型的directive,监控当前DOM元素对应的scope上的属性变化。

当然,如果事先知道了这个属性的名字(比如val),可以这样写:

restrict: 'A',
link: function (scope, element, attrs) {
--scope.$watch('val', function() {
----// DOM操作
--});
}


但是这样的话耦合太紧了,能否监控scope上的所有属性?而不需指定某属性的name?

有一种方法就是将$watch方法中的listerner(第二个参数)当做watchExpression(第一个参数)传进去:

restrict: 'A',
link: function (scope, element, attrs) {
--scope.$watch(function() {
----// DOM操作
--});
}

但这样性能损耗相当大,每次$digest执行的时候都要执行好多遍DOM操作...

大家遇到过这种情形没?求指点啊!
7698 次点击
所在节点    JavaScript
2 条回复
timonwong
2014-02-23 22:19:11 +08:00
scope.$watch(function() {
return [attrs.name1, attrs.name2, ...]; // Return an array of attribute names here, or get keys directly from attrs
}, function() {
// action, DOM 操作
});
hustlzp
2014-02-23 22:29:15 +08:00
@timonwong Thanks!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/101498

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX