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

推迟$ digest之后的angularjs监视执行(引发DOM事件)

易嘉胜
2023-03-14
问题内容

我有一块手表触发DOM事件:

scope.$watch(function() { return controller.selected; }, function(selected) {
    if (selected) {
        $input.trigger('focus');
    }
});

问题是我有一个处理“ focus”的处理程序scope.$apply

$input.bind('focus', function() {
    scope.$apply(function() { controller.focused = true; });
});

因此,当我$watch从内部触发时$digest,会导致错误,因为它尝试触发另一个$digest

我要解决的方法是将触发器放入中$timeout

scope.$watch(function() { return controller.selected; }, function(selected) {
    if (selected) {
        $timeout(function() { $input.trigger('focus'); });
    }
});

到目前为止,此方法有效。这是处理此问题的正确方法吗?我不确定这是否能解决所有问题,并且想查看是否有一种角度认可的方法来在摘要之后延迟一段代码。

谢谢!


问题答案:

$超时通常就是用来运行一些经过消化周期(以及 之后
的浏览器呈现)。

$timeout执行该功能后,将导致另一个摘要循环被执行。如果您trigger不影响Angular,可以将invokeApply参数设置为false以避免运行另一个摘要循环。

如果要让回调在浏览器呈现 之前 运行:如果使用$evalAsync from指令对
代码进行排队,则应在Angular操作DOM之后但在浏览器呈现之前运行代码。但是,如果代码是使用$evalAsync _控制器_排队的,则它将在Angular操纵DOM之前(以及在浏览器呈现之前)运行。



 类似资料:
  • 我正在用一个指令计算html元素的最小高度,当我试图通过scope.$apply()更新父作用域值时,我得到以下错误: 我的指示是: 我总是可以使用更新父作用域值,但在这种情况下,指令的作用域规则将不起作用(例如,如果我想通过“@”隔离作用域,则ctrl仍将接收更新)。 此外,我可以通过设置min-height值,但我希望以角度的方式进行。 问题出在哪里? *使用angular 1.3.5处理任何

  • 本文向大家介绍VUE DOM加载后执行自定义事件的方法,包括了VUE DOM加载后执行自定义事件的方法的使用技巧和注意事项,需要的朋友参考一下 最近想用vue做一个小东西,谁知道一开始就遇到了一个棘手的问题: 首先我想在页面加载前通过ajax请求页面展示所需要的信息,于是我在created钩子函数里面请求了我想要的数据 这一步很顺利,接下来就是要将数据绑定到对应的元素中,我在这里需要将请求得到的图

  • 我正在玩新的ES6模板文字功能,我首先想到的是一个<code>字符串。为JavaScript格式化,所以我开始实现一个原型: ES6Fiddle 但是,模板文字在传递给我的原型方法之前会被评估。有没有什么方法可以编写上面的代码来将结果推迟到我动态创建元素之后?

  • 问题内容: 我正在使用新的ES6模板文字功能,想到的第一件事是JavaScript,因此我着手实现了一个原型: 但是,在将模板文字传递给我的原型方法之前,需要先对其进行评估。有什么方法可以编写上述代码以将结果推迟到动态创建元素之后? 问题答案: 我可以看到三种解决方法: 使用模板字符串,就像设计使用的那样,没有任何功能: // might make more sense with variable

  • 问题内容: 有没有办法推迟或延迟摘要的发生? 我想对模型进行一堆更改,但是在对模型进行所有更改之前,我不希望摘要触发。模型上的某些对象具有观察者,这些观察者可以更新模型上的其他对象以进行更改。 理想情况下,我想 停止$ digest 对模型进行所有更改 开始$ digest $ digest将发现所有脏物并解雇观察员。 另一个解决方案是,我可以停止$ digest,而不是停止 删除观察者 对模型进

  • 问题内容: 我是AngularJS的新手,所以请原谅我这个转储问题。 如何收听“点击”或“ ousemove”之类的“ dom”事件? 这就是我得到的(没有错误,但在控制台中也没有结果) //代码基于原始的angularjs-seed。 问题答案: 在AngularJS中,事件通常由指令处理。 指令是教授HTML新技巧的一种方式。在DOM期间,编译指令将与HTML匹配并执行。这允许指令注册行为或转