- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
如果先更改作用域属性,然后再广播事件,那么相应的观察者回调和事件监听者回调是否总是以相同的顺序执行?例如:
$scope.foo = 3;
$scope.$broadcast('bar');
和其他地方:
$scope.$watch('foo', function fn1(){...});
$scope.$on('bar', function fn2(){...});
fn1
是否总是在 fn2
之前执行,反之亦然,或者是否可以不依赖该顺序?请引用来源,最好是官方 Angular 文档。
以防万一:假设 $scope.foo= 和 $broadcast 发生在由 ng-click(即用户交互)调用的函数中
[旁白] 抱歉,问题标题草率 - 如果您有更好的名称,请重命名。
最佳答案
要了解发生了什么,您需要了解 Angular 的 $digest周期和事件 $emit and $broadcast功能。
根据一些研究,我还了解到 Angular does not use any kind of polling mechanism to periodically check for model changes .这在 Angular 文档中没有解释,但可以测试(参见 this answer to a similar question )。
将所有这些放在一起,我写了 a simple experiment并得出结论,您可以依赖首先运行的事件处理程序,然后再运行您的监视功能。这是有道理的,因为在摘要循环期间可以连续多次调用 watch 函数。
下面的代码...
template.html
<div ng-app="myApp">
<div watch-foo ng-controller="FooController">
<button ng-click="changeFoo()">
Change
</button>
</div>
</div>
script.js
angular.module('myApp', [])
.directive('watchFoo', watchFooDirective)
.controller('FooController', FooController);
function watchFooDirective($rootScope) {
return function postLink(scope) {
scope.$watch(function () {
return scope.foo;
}, function (value) {
console.log('scope.$watch A');
});
scope.$on('foo', function (value) {
console.log('scope.$on A');
});
$rootScope.$on('foo', function (value) {
console.log('$rootScope.$on A');
});
$rootScope.$on('foo', function (value) {
console.log('$rootScope.$on B');
});
scope.$on('foo', function (value) {
console.log('scope.$on B');
});
scope.$watch(function () {
return scope.foo;
}, function (value) {
console.log('scope.$watch B');
});
};
}
function FooController($scope) {
$scope.foo = 'foo';
$scope.changeFoo = function() {
$scope.foo = 'bar';
$scope.$emit('foo');
};
}
...单击“更改”按钮时在控制台中产生以下结果:
scope.$on A
scope.$on B
$rootScope.$on A
$rootScope.$on B
scope.$watch A
scope.$watch B
更新
这是另一个测试,说明在摘要循环中两次调用监视回调,但没有第二次调用事件处理程序:https://jsfiddle.net/sscovil/ucb17tLa/
第三个测试在监视函数中发出一个事件,然后更新被监视的值:https://jsfiddle.net/sscovil/sx01zv3v/
在所有情况下,您都可以依赖在监视函数之前调用的事件监听器。
关于javascript - angular watchers 和 event listeners 以什么顺序执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34519047/
我正在尝试使用松弛配置ES通知。这就是我要在elasticsearch.yml中使用的内容,它来自elasticsearch网站上的文档。 xpack.notification.slack: ac
我正在尝试配置 Elasticsearch Watcher Watch 以提醒某些消息,但我无法让我的搜索输入正常工作。 我尝试同时使用 Sense 和 elasticsearch-watcher-p
您好,我实现了一个 java 文件观察器,它在创建文件时读取文件。 它在开发机器上运行良好。我创建了一些文件并通过日志调用了 ENTRY_CREATE,我的程序按预期读取了这些文件。不调用 ENTRY
记住 ng-change,我想看看如何为输入字段编写基本的监视函数。 如何将 watch 应用到以下输入字段作为示例? Col Row 最佳答案 那里有 2
我有一个包含两个编辑文本的 Activity ,并且在该 Activity 中有一个单独实现的 TextWatcher。我想制作一个实现 TextWatcher 和该编辑文本中的 TextWatche
本文整理了Java中mage.watchers.common.ZuberasDiedWatcher类的一些代码示例,展示了ZuberasDiedWatcher类的具体用法。这些代码示例主要来源于Git
在 GWT Stock Watch 教程中,它似乎每 4 秒轮询一次服务器以获取新数据。这是 GWT 的标准工作方式还是可以使用推送类型技术,以便在服务器上引发新事件时调用客户端代码? 最佳答案 这是
我在 WebStorms 中使用 Less.css File Watcher,我想排除特定文件进行编译。 我有一个包含所有其他 CSS 的 style.less 文件,应该只编译这个文件。我怎样才能做
我正在尝试使用以下条件在 Elasticsearch 中创建 watch : 字段“ht”必须小于 100 字段“sv”不能是“tier1”,字段“rv”可以是其他任何内容。 字段“sv”不得为“ti
我正在使用 angularjs 并且需要找到 ng-repeat 的 watch ,因为我需要 ng-repeat 从特定点停止工作。这是我的代码: {{item.name}}
我过去使用过 UiAutomator。它不会做我现在需要的,所以我正在使用 Espresso .我喜欢 UiAutomator 的一件事是能够创建 UiWatcher。我有很多随机出现的对话框。 所以
我写了一个 c# 代码来获取我的粗略位置。 该程序将在没有 GPS 传感器的笔记本电脑上运行。 namespace WindowsFormsApplication1 { class Class
我使用的是一个开发不良的应用程序,由于内存泄漏或其他随机错误而不断重新启动,这些错误在重新启动时不会重复。我无权访问代码,也无法修复它。 我开发了一个 c# 应用程序来管理重启并在程序停止时保持程序运
本文整理了Java中me.libraryaddict.disguise.disguisetypes.watchers.ZombieVillagerWatcher类的一些代码示例,展示了ZombieVi
在webstorm中编译coffeescript文件后如何自动缩小javascript输出文件? 更新: 我打算将 UglifyJS 或 YUI Compressor 与 File Watcher 一
任何人都知道如何在汇总观察器触发时运行代码?我看到了一些关于捕获观察者事件的引用,例如“开始”,但我使用的是 rollup.config.js 文件,我不知道在哪里以及如何检查此类事件。仅供引用,我正
我们有一个应用服务在 Azure 网关和 Azure WAF 后面运行。应用服务连接 2 个 API 一个 API 正在 Azure 虚拟机中运行 另一个 API 正在另一个应用服务中运行 我们可以使
我想将组件之间的一些变量存储在全局窗口对象中,所以我这样做 window.showFilters = !window.showFilters 在组件中,我尝试在窗口对象上使用观察程序,例如 watch
我有一个 AngularJS 应用程序,用于动态构建页面(从服务器检索 XML 并通过读取 XML 构建页面或表单),对于 XML,我们必须构建几个页面,所有页面都彼此相关,并且可以通过以下方式为负数
如何将 Elasticsearch Watcher 的每个事件限制为一个警报。如果日志中显示错误,观察者将触发直到得到确认。 我只想要新错误的警报而不是时间限制。 最佳答案 我已经找到了解决这个问题的
我是一名优秀的程序员,十分优秀!