javascript - $scope.$watch 函数未按预期触发 nodelist.length 更改

标签 javascript angularjs model-view-controller angularjs-scope

我想在 <li> 时做点什么元素悬停在上方。我以为我可以这样做

$scope.$watch(function(){
    return  document.querySelectorAll("li:hover").length;
},
function(newVal, oldVal){
    console.log(newVal, oldVal);
});

基于我找到的解决方案 here .当应用程序加载时,我看到 0 0在控制台中,这是我所期望的。然而,当我将鼠标悬停在 <li> 上时元素,我希望看到 0 1 .但我什么也没看到。我认为选择器很好,因为输入

setInterval(function(){
   console.log( document.querySelectorAll("li:hover").length )
}, 500);

进入控制台会打印0每半秒一次,直到我将鼠标悬停在 <li> 上到那时,我会看到 1 .如何更改我的 $scope.$watch查看此节点列表的长度?

最佳答案

在我的学习经历中,

$scope.$watch 只监视作用域对象和作用域提供者。它不会使用 dom 操作来观察 Jquery。有人认为你这样做是在范围内分配 jquery 对象并观察变化,你可以继续下一个级别。

$scope.liLength = document.querySelectorAll("li:hover").length;

$scope.$watch(function($scope){
    return  $scope.liLength;
},
function(newVal, oldVal){
    console.log(newVal, oldVal);
});

关于javascript - $scope.$watch 函数未按预期触发 nodelist.length 更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32186807/

相关文章:

javascript - 我的 javascript 无法运行,文件是否未正确链接?

javascript - 在输入字段中使用 ng-model 的 Angular 获取 null

angularjs - 如何使用新数据重新加载 ng-view ?

c# - 在 MVC 中将数据从 View 传递到部分 View

javascript - 使用 ng Repeat (Angular js) 在表中放置以逗号分隔的文本字段值

php - 我怎样才能扩展 Zend_Controller_Action 使一个函数在所有 Controller 中通用

javascript - 如何动态统计div显示 block ?

javascript - 使用jquery多次点击按钮问题

javascript - 创建 d3.js 计时器的问题

angularjs - 从不同的 JEE 应用程序获取 AEM 创作的模板