修改 $watch 中的监视值

Modifying a watched value within a $watch

我有一个 <input ng-model='list' ng-list>,我想确保此文本字段中没有出现重复项 - 如果列表包含重复项,我想自动删除它们。

我在控制器中放置了一个 $scope.$watch('list', function(listValues) {,并尝试从 listValues 中删除任何重复项,但遇到了问题。在 watch 函数中,如果我设置 listValues = _.unique(listValues)$scope.list 的值永远不会改变。如果我尝试 $scope.list = _.unique(listValues),我已经 运行.

收到关于摘要周期的错误

我如何观察作用域变量的变化,并在发生变化时执行操作来更改新值?

这是一个不起作用的例子:http://plnkr.co/edit/b0bAuP1aXPg3HryxCD9k?p=preview

我认为这很简单。我应该使用其他方法吗?

在这种情况下,

ng-change 可能是更好的方法。特别是 ng-change 的这个属性:

if the model is changed programmatically and not by a change to the input value

如果您将 de-dupe 放在一个函数中,然后使用 ng-change 调用它,我想您会得到想要的结果。