我试图弄清楚为什么$watch
没有触发我。这是相关控制器的片段:
$scope.$watch('tasks', function (newValue, oldValue) {
//do some stuff
//only enters here once
//newValue and oldValue are equal at that point
});
$scope.tasks = tasksService.tasks();
$scope.addTask = function (taskCreationString) {
tasksService.addTask(taskCreationString);//modifies tasks array
};
在我看来,tasks
显然是正确更新的,因为我的长度范围是这样的:
<span>There are {{tasks.length}} total tasks</span>
我想念什么?
尝试$watch('tasks.length', ...)
或$watch('tasks', function(...) { ... }, true)
。
默认情况下,$
watch
不检查对象是否相等,而仅作为参考。因此,$watch('tasks', ...)
将总是简单地返回相同的数组引用,并且不会改变。
更新: Angular v1.1.4添加了一个$
watchCollection()
方法来处理这种情况:
Shallow监视对象的属性,并在任何属性更改时触发(对于数组,这意味着监视数组项,对于对象映射,这意味着监视属性)。如果检测到更改,
listener
则触发回调。
问题内容: 我有一个针对ui-select2下拉菜单的手表设置(来自ui-bootstrap)。手表会在加载时触发,但不会在数据更改时触发,我不知道为什么。 不应用模型更改或不使用第三个参数进行相等性比较(至少来自我的代码)不是一个常见的问题。 我需要怎么做才能使其点火? 这是一个说明问题的小问题。 问题答案: 我修好了一些东西。 http://plnkr.co/edit/5Zaln7QT2gET
我的组件具有以下功能: 我可以在我的html页面中插入选择菜单,但更改事件不会在我选择项目时触发。有人能让我知道为什么会发生这种情况吗? 谢谢
问题内容: 我正在尝试使用所有动态元素创建一个层叠下拉列表。 我的HTML: 我有2个使用ajax加载元素的函数,都可以正常工作: 我需要根据站点选择来调用GetSectors。我有这个: 但这是行不通的。我正在使用jQuery 1.8.3。 知道哪里出了问题吗? 谢谢! 问题答案: 尝试 事件委派 : 事件冒泡的行为使我们可以执行“事件委托” — 将处理程序绑定到高级元素,然后检测哪个低级元素启
我有一个在本地运行良好的函数,但在Azure中不会触发,除非该函数是“唤醒”的。该函数只是将项从一个容器复制到另一个容器,主键和id列交换(作为最终一致的辅助索引)。该应用程序中有两个函数,都是Cosmos触发器(不同的源容器和租约前缀);我的所有其他功能都在其他应用程序中。 该函数在Linux消耗计划中,通过GitHub Action部署,该操作使用zip部署,应该是同步触发器。没有其他函数侦听
我有一个父组件,在parent.component.html中有以下代码: 在子组件中,我有如下输入参数: 还有一个名为 当父输入被修改时,我希望子输入执行< code>getSpecs()函数。这可能吗?
当用户滑动滑块时,我试图触发一个事件,当滑动停止时,该值会更改。根据jQuery文档,对于这种情况,事件是理想的选择。所以我正在尝试: 然而,我观察到,当我向右拖动滑块并再次将其拖回起点(页面加载时滑块的初始位置)时,警报仍会触发。这是jQuery错误吗?如果没有,我该如何解决这个问题?