元素显示上的角度观察不起作用
Angular Watch on element show not working
当元素变得可见时,我使用agler $watch
来触发警报。
var scrollElement = "#hiddenObj";
$scope.$watch(function() { return $(scrollElement).is(':visible') }, function() {
alert('hi);
});
问题是,警报在页面加载时显示,但在页面加载中,默认情况下该元素是隐藏的,并且仅在单击某个链接时显示。
为了证实我的假设,我在这段代码之前放了一个断点,在控制台中,我执行了这段代码:
$(scrollElement).is(':visible')
并返回CCD_ 2。这证实了该元素在页面加载时是不可见的。我不知道为什么警报仍然显示在页面加载中。当我点击链接,scrollElement
实际上变为可见时,什么也没发生。
这里有我遗漏的东西吗?
这些东西应该在改变范围变量的指令中编码,比如$scope.elemVisible
.directive("visible",function(){
return{
restrict:"AE",
scope:{yourVarName:'='},
link:function(scope,elem,attrs){
$(window).scroll(function(ev){//if you want to do something on scroll
var vis=$(elem).is(':visible');
scope.yourVarName=vis;
scope.$apply();
});
$(someElement).bind('click',function(ev){// or if you want do something on click
var vis=$(elem).is(':visible');
scope.yourVarName=vis;
scope.$apply();
});
}
}
})
html
<visible yourVarName="isVisible"/>
控制器
$scope.$watch('isVisible',function(newVal,oldVal){...});
只要watchExpression
发生更改,就会执行监视侦听器回调,而不是在true/false
发生更改时执行。因此,当您的页面被加载时,您的watchExpression
值将是false
,侦听器将被执行。为了避免这种情况,您可以检查watchExpression
:的新值
$scope.$watch(function() { return $(scrollElement).is(':visible') }, function(newVal) {
if(newVal === true) {
alert('Element showed');
}
});
第二个问题是CCD_ 9在每次对CCD_。因此,您的点击处理程序(显示/隐藏元素)必须触发$digest循环才能计算表达式,ng-click
将是一个好主意。
在您的情况下,watchExpression
是:
function() { return $(scrollElement).is(':visible') }
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 简单的javascript在Shopify中不起作用
- Recaptcha在IE7和IE8中不起作用
- Ember Data DS.Model's set函数不起作用
- JsFiddle上的鼠标事件不起作用
- 我的AngularJS表达式没有'不起作用
- 点击按钮输入不起作用
- 面向对象的Javascript代码在IE7中不起作用
- 分部隐藏在jquery中不起作用
- 在phonegap应用程序内部重定向不起作用
- Array.length似乎不起作用;console.log则显示其他情况
- $ionicplatform内的$scope不;不起作用
- 余烬JS组件观察器不起作用
- 对计算可观察量的挖空 JS 绑定不起作用
- 突变观察者不起作用
- 输入值绑定和观察器在聚合物中不起作用
- KnockoutJS.Mapping.FromJS-可观察数组-删除不起作用
- 元素显示上的角度观察不起作用