从指令添加值时,数组上的$ scope。$ watch不更新

杰罗德

我敢肯定这只是一个新手的错误...这是小偷:http ://plnkr.co/edit/L5702XAtQwBRmzP2kqoA?p=preview

我有一条指令,它根据选定的复选框更新值:

// --- 8< ---
// Detect click on checkbox, get value, etc... then:
// --- 8< ---
scope.$apply(function() {
    if ($this.prop("checked")) {
        selected.push(value);
    } else {
        for (var i = 0; i < selected.length; i++) {
            if (selected[i] == value) {
                selected.splice(i, 1);
                break;
            }
        }
    }

    console.log("selected updated to: " + selected)
});

我正在页面控制器中查看该集合:

$scope.$watch("model.selected", function(selected) {
    console.log("----- Controller updated with: ", selected);
});

console.log第一次加载页面时,此处语句仅显示一次。但是,在页面上,我有一个绑定,显示了选定的值数组:

Selected: {{ model.selected }}

确实得到更新。

为什么我的手表也没有更新?

本·普里贝(Ben Priebe)

要在集合(即数组)具有添加,删除或更改的值时得到通知,您需要使用$ scope。$ watchCollection方法。

更改此:

$scope.$watch("model.selected", function(selected) {
    console.log("----- Controller updated with: ", selected);
});

对此:

$scope.$watchCollection("model.selected", function(selected) {
    console.log("----- Controller updated with: ", selected);
});

这是更新的plunkr:

http://plnkr.co/edit/f2xCge2ragh5uWKRRwof?p=preview

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章