我正在使用AngularJS和ng-repeat
。中继器中的每个项目都是巨大的项目,其中包含许多ng-bind
,并且列表中包含滚动条。我想编写一个代码,当物品不可见时(滚动条外)注销每个ng-bind
的手表,并在物品可见时再次注册手表。
我有两个问题:
1.这样的代码是否已经存在?
2. ng-bind创建一个手表。我如何获得手表取消注册($scope.$watch
返回注销方法,但这发生在ng-bind指令内)?当项目不可见时,在ng-bind中注销观察者
谢谢!
我正在使用AngularJS和ng-repeat
。中继器中的每个项目都是巨大的项目,其中包含许多ng-bind
,并且列表中包含滚动条。我想编写一个代码,当物品不可见时(滚动条外)注销每个ng-bind
的手表,并在物品可见时再次注册手表。
我有两个问题:
1.这样的代码是否已经存在?
2. ng-bind创建一个手表。我如何获得手表取消注册($scope.$watch
返回注销方法,但这发生在ng-bind指令内)?当项目不可见时,在ng-bind中注销观察者
谢谢!
如果你确实想访问元素上的ng-bind,你可以创建一个简单的指令,传递给作用域。当你有一个范围,你可以访问手表$$watchers
。我做了一个小提示,表明here。
link: function(scope, elt, attrs) {
console.log(scope.$$watchers);
}
至于你的滚动问题,你有几个选项。我以前没有用过,但似乎有一个plugin,对此我不会保证正确性。 inview指令背后的理论是,您将滚动监听器附加到您的容器。滚动后,您可以计算哪些元素在视图中。
在此之后,您可以为那些被查看的人触发一个inview功能,并触发其他曾经被查看的人的outview(可以删除监视者)。
如果您有任何疑问,请告知我。希望这可以帮助!
我正在使用angular-viewport-watch,它具有在可滚动容器中滚动的嵌套表格(具有多行)。
不得不解决一些问题(this和this),但总体来说效果很好。当一个元素不在视口中时,其所有的手表都会被删除(递归),并且当它重新出现在视口上时,观察者将被添加回来。
我使用annotate-watchers代码片段(在Chrome上)可以轻松查看有多少个观察者与每个DOM元素相关。
您的意思是说您有一个视口,并且您只想要监视当前的视口元素? –
@RoyiNamir:是的。 – Naor