3

我有一个已经与过滤器绑定的文本区域,因此它将在页面加载时加载正确的信息,但是现在我想在文本区域更改时更改模型,但是一旦我添加了模型并更改事件初始绑定停止工作。

这是作为单向绑定的 HTML,它有效:

<textarea>{{mainboard | textboard}}</textarea>

我的想法是我会添加一个更改事件,没有模型就会出错,所以我添加了一个模型,如下所示:

<textarea ng-model="textmainboard" ng-change="updateMainboard()">{{mainboard | textboard}}</textarea>

我怎样才能有两种方式绑定,一种方式被过滤(本例中的过滤器是文本板服务)?

编辑:这是我试图做模糊的 js 小提琴,它不应该需要模型:http: //jsfiddle.net/vjkgH/

编辑:确切的用例是我有一个项目列表。项目列表显示为 li 元素并显示在文本区域中,其中重复项显示为“3x item”。可以通过两种方式更改项目列表,通过点击添加按钮或更改文本区域。

这是一个示例状态:

<ul>
 <li>item1</li>
 <li>item1</li>
 <li>item2</li>
</ul>
<textarea>
 2x item1
 1x item2
</textarea>
4

1 回答 1

1

对于我自己的用例,问题是 Angular 仅在您的新变量不等于旧变量时运行 $watch [换句话说,更新您的 DOM],除非 $watch 函数的第三个参数设置为 true .

对于文本区域或任何文本事物上的 ng-model,第三个参数始终为 false,因此它将旧数组与新数组进行比较,它们等于相同的引用,因此,angular 不认为数组改变了。

我已经从 Angular 社区请求了 github 上的一个功能,该功能以某种方式添加了一个选项,以允许在执行 ng-model 时将 objectEquality 设置为 true。否则,您将需要编写自己的指令来模仿 ng-model,但还要将 $watch 的第三个参数设置为 true。

所以,为了得到我想要的结果,我使用了这个 SO QA 的答案:如何在 angular.js 中进行双向过滤? 并让我对数组的所有更新,克隆数组,所以总是有一个新的参考。效率低下让我很担心,但我的旧笔记本电脑似乎能以闪电般的速度处理它,足够好。

于 2013-08-29T04:29:58.940 回答