2013-08-27 3 views
3

У меня есть текстовая область, которая уже связана с фильтром, поэтому она будет загружаться с правильной информацией о загрузке страницы, но теперь я хочу изменить модель при изменении области текста, но как только я добавлю модель и событие изменения перестает работать.Как связать событие изменения с текстовым полем, в котором уже есть односторонняя привязка, которая отфильтрована?

Вот HTML, как один из способов связывания, который работает:

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

Мое мышление было то, что я хотел бы добавить событие изменения, какие ошибки без модели, поэтому я добавил модель, например, так:

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

Как я могу иметь два способа связывания с одним из способов фильтрации (фильтр в этом примере услуга textboard)?

EDIT: Вот JS скрипку меня пытается сделать размытость, которая не должна требовать от модели: http://jsfiddle.net/vjkgH/

EDIT: Точный случай использования У меня есть список элементов. Список элементов отображается как элементы li и отображается в текстовом поле с дубликатами, показанными как «3x itemb». Список элементов может быть изменен двумя способами: нажатием кнопки добавления или изменением текстового поля.

Вот пример состояние:

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

Всегда убедитесь, что ваша 'ng-model' имеет точку в ней. Например, 'mainboard.text' (вам нужно создать объект« mainboard »в области). Скорее всего, вы назначаете дочернюю область и теряете ссылку на родительскую область. – sirhc

+0

Я попытался добавить mainboard.text в качестве ngmodel и добавить $ scope.textmainboard = {}; в моем контроллере, но он все еще не отвечает, имея также {{}} привязку. Btw У меня есть временное исправление, которое должно использовать ngblur ..., которое по существу делает то же самое, что я хочу. На самом деле я думаю, что это всего лишь случай, когда меня путают в случае использования ngchange ... он не предназначен для простого замены события изменения, он предназначен для двусторонней привязки, в отличие от размытия или щелчка и т. Д. –

+0

hmmm ... кажется, ngblur не запускает :(нет ошибок или чего-то еще ... функция просто не вызывается. –

ответ

1

Для моего случая использования, проблема в том, что угловой работает только $ смотреть [другими словами, обновляет DOM], когда ваша новая переменная не равна ваша старая переменная, если для третьего параметра функции $ watch не установлено значение true.

для ng-модели в текстовой области или любой текстовой вещи, третий параметр всегда является ложным, поэтому он сравнивает старый массив с новым массивом, который равен одной и той же ссылке, и, следовательно, Думаю, массив изменился.

Я запросил функцию github из углового сообщества, что опция как-то добавлена, чтобы позволить objectEquality быть установленным true при выполнении ng-модели. В противном случае вам нужно будет написать свою собственную директиву, которая имитирует ng-model, но также устанавливает третий параметр $ watch в true.

Итак, чтобы получить желаемый результат, я использовал ответ на этот SO Q: How to do two-way filtering in angular.js? и все мои обновления для массива, клонирование массива, так что всегда есть новая ссылка. Неэффективность меня беспокоит, но мой старый ноутбук, похоже, справляется с этим молниеносно, настолько хорошо.

Смежные вопросы