当前位置: 首页 > 面试题库 >

AngularJS观看DOM更改

欧阳元魁
2023-03-14
问题内容

我有一个auto-carousel指令可以遍历链接元素的 children

但是,尚未将子级加载到DOM中,因为ng-if尚未解析其s表达式。

如何确定父指令知道它的DOM树已更改?

        <ul class="unstyled" auto-carousel>
          <li class="slide" ng-if="name">{{name}}</li>
          ...
          <li class="slide" ng-if="email">{{email}}</li>
        </ul>

我可以使用,$timeout但是感觉不可靠。我也可以用ng-show代替,ng-if但这不能回答问题,也不是我所需要的。


问题答案:

所以这就是我最终要做的事情:

我发现您可以将函数传递给$scope.$watch。从那里,很容易返回想要监视更改的表达式的值。它的工作原理就像在范围上传递属性的键字符串一样。

link: function ($scope, $el, $attrs) {
  $scope.$watch(
    function () { return $el[0].childNodes.length; },
    function (newValue, oldValue) {
      if (newValue !== oldValue) {
        // code goes here
      }
    }
  );
}

我正在观看childNodes,不是children,因为该childNodes列表包含元素 以及
文本节点和注释。这是无价的,因为指令角使用注释占位符喜欢ng-repeatng-ifng-switchng- include其执行transclusion并改变DOM,而children仅持有元素。



 类似资料:
  • 问题内容: 这似乎是一个愚蠢的问题,但是我需要知道如何监视页面的整个DOM并在页面发生任何变化时重新对其进行编译。本质上,这是AngularJS在默认情况下通过使用数据绑定来执行的操作,但是我需要在DOM中的任何内容发生变化时(不仅是绑定)发生这种情况。原因是因为我有一个完全用HTML,Javascript和PHP构建的应用程序。它是一个单页应用程序,具有一个主页,并将PHP注入该页面内的DIV包

  • 问题内容: 我在了解角度组件范围时遇到麻烦。如果我做类似的事情: 它可以正常打印…现在,如果我做一些小的修改并使其异步: 它不会打印任何内容。我可以使用点击处理程序thouogh来更改值,但是对于http和其他异步操作而言,它将无法正常工作。 问题答案: 运行异步代码时,需要让Angular知道某些内容已更新。这使得angular运行$ digest循环,检查是否需要更新任何绑定。 为此,请将您的

  • 问题内容: 在AngularJS中,我有一个指令来监视作用域变量。当变量包含某些数据时,我需要对该变量进行一些更改。问题是,当我更改变量时,将再次触发我。所以我最终陷入了持续的循环。 这会继续触发,这很有意义。但是我确实需要一种更改监视变量的方法。有没有办法做到这一点? 问题答案: 当使用监视变量的变化时,角度检查参考值是否已更改。如果具有,则执行处理程序以更新视图。 如果您打算在$ watch处

  • 问题内容: 我有一个网页可以用作单个实体的编辑器,它位于$ scope.fieldcontainer属性中的深层图形中。从REST API获得响应(通过$ resource)后,将手表添加到“ fieldcontainer”。我正在使用此手表来检测页面/实体是否为“脏”。现在,我正在使“保存”按钮弹跳,但实际上我想使“保存”按钮不可见,直到用户弄脏模型为止。 我得到的只是手表的一个触发器,我认为这

  • 主要内容:ng-disabled 指令,AngularJS 实例,ng-show 指令,AngularJS 实例,AngularJS 实例,ng-hide 指令,AngularJS 实例AngularJS 为 HTML DOM 元素的属性提供了绑定应用数据的指令。 ng-disabled 指令 ng-disabled 指令直接绑定应用程序数据到 HTML 的 disabled 属性。 AngularJS 实例 < div ng-app= "" ng-init= "mySwitch=true" >

  • 问题内容: 我想监视字典中的更改,但是由于某种原因,未调用监视回调。 这是我使用的控制器: 这是小提琴。 我希望每次更改名称或姓氏时都会触发$ watch回调,但是不会发生。 正确的方法是什么? 问题答案: 调用with 作为第三个参数: 默认情况下,在JavaScript中比较两个复杂对象时,将检查它们是否具有“引用”相等性,即询问两个对象是否引用同一事物,而不是“值”相等性,后者检​​查这些对