如何将更改事件附加到已经过滤的单向绑定的textarea?

时间:2013-08-27 04:15:57

标签: javascript angularjs

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

这是HTML作为单向绑定,它起作用:

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

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

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

如何进行双向绑定,一种方式被过滤(本例中的过滤器是文本板服务)?

编辑:这是我尝试模糊的一个小问题,它不需要模型:http://jsfiddle.net/vjkgH/

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

以下是一个示例状态:

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

1 个答案:

答案 0 :(得分:1)

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

对于文本区域或任何文本事物的ng模型,第三个参数始终为false,因此它将旧数组与新数组进行比较,它们等于相同的引用,因此,angular不会认为阵列发生了变化。

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

所以,为了得到我想要的结果,我使用了这个SO QA的答案:How to do two-way filtering in angular.js? 并拥有对数组的所有更新,克隆数组,因此始终有一个新的引用。效率低下让我担心,但是我的旧笔记本电脑看起来很快就能处理它,非常好。