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

如何观察DOM的变化AngularJS

杨鸿畅
2023-03-14
问题内容

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

我想对其进行一些修改,但要使我的代码与原始代码完全分开。为此,我需要能够在每次注入具有自己的DOM结构的新PHP文件时重新编译DOM。到目前为止,我似乎没有用。

app.directive("watch", function () {
    return function (scope, element, attr) {
        scope.$watch("watch", function(oldValue, newValue) {
            if(newValue) {
                console.log("there is a new value");
                console.log("the new value is " + newValue);
             }
         });
     }
});

我在<body>标签上添加了watch属性,但它似乎不起作用,当dom更改时,没有任何记录。最终,我想用$
compile替换console.log,但首先需要使手表工作。有人可以指出我做错了什么吗?


问题答案:

这是一个坏主意,但我会逗你的。

因此,正如我在上面的评论中所述,做您想做的事情是一个坏主意。就是说,如果您仍然想这样做,则可以$watch通过将函数作为第一个参数传入来进行几乎任何操作。

下面的代码将检查<body>标记内的HTML 是否已更改。请注意, 这是一个可怕的想法

$scope.$watch(function () {
   return document.body.innerHTML;
}, function(val) {
   //TODO: write code here, slit wrists, etc. etc.
});

上面会随时火手表 ANYTHING 在HTML的变化。

  • 当输入值发生变化时
  • 当选择在下拉菜单中更改时
  • 当html中任何元素的属性发生变化时。
  • 等等

附加信息: 截至目前,在许多浏览器中,还没有真正好的方法来监视已加载的新DOM元素。最好的方法仍然是在添加新的DOM元素时触发某些操作。



 类似资料:
  • 问题内容: 我想知道是否有什么办法可以在程序运行时观察变量值的变化。当然不使用调试器,我想以 编程方式进行 。例如: 因此,在运行时,如果在我的项目中任何类的任何方法中修改了此value 事件,则应调用该事件。 问题答案: 您需要用一个类替换该类型,该类将在值更改时调用您的侦听器。您可能想忽略未实际更改的值的设置。 例如 您可以使用字节码注入执行此替换,但是更改原始代码非常简单。 一种替代方法是监

  • 问题内容: 在Javascript中,当使用基于推,弹出,移位或基于索引的分配修改数组时,是否有通知方法?我想要能够触发我可以处理的事件的东西。 我知道SpiderMonkey 的功能,但是仅当整个变量设置为其他值时,该功能才起作用。 问题答案: 有一些选择… 1.覆盖推送方法 走快速而肮脏的路线,您可以覆盖数组1的方法: 1或者,如果要定位 所有 数组,则可以覆盖。但是要小心;您环境中的其他代码

  • MutationObserver 是一个内建对象,它观察 DOM 元素,并在检测到更改时触发回调。 我们将首先看一下语法,然后探究一个实际的用例,以了解它在什么地方有用。 语法 MutationObserver 使用简单。 首先,我们创建一个带有回调函数的观察器: let observer = new MutationObserver(callback); 然后将其附加到一个 DOM 节点: ob

  • 问题内容: 一个人如何监视/触发一条路线上的事件? 问题答案: 以下事件也可用(它们的回调函数采用不同的参数): $ routeChangeSuccess $ routeChangeError $ routeUpdate-如果将reloadOnSearch属性设置为false

  • 问题内容: 如何在Angular中使用多个变量,并在其中之一发生更改时触发回调。 问题答案: 更新 Angular现在提供了两种范围方法$ watchGroup (从1.3开始)和$watchCollection。这些已被@blazemonger和@kargold提及。 这应该独立于类型和值而工作: 在这种情况下,您必须将第三个参数设置为true。 在这种情况下,字符串连接将失败: 在用户单击按钮

  • 问题内容: 我知道我可以跑步: 但是我想不出一种方法来监视应用程序中的更改。 问题答案: 在文档中: https //github.com/angular-ui/ui-router/wiki#state-change- events