2014-09-29 2 views
0

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

все, что я хочу сделать, это захватить элементы ввода и пожарную службу.

<input type="text" ng-model="updatedListTitle" ng-enter="updateList(list.id, updatedListTitle)"> 

как вы можете видеть Я использую ngmodel для захвата данных в контроллере. проблема заключается в том, что при каждом нажатии клавиши все мои наблюдатели увольняют без необходимости (хотя я знаю, что угловой быстрый, и вы можете стрелять как 1000 наблюдателей и все). но просто захват элемента с помощью jquery будет более эффективным.

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

ответ

0

... Ну, на мой взгляд, как вы сделали это совершенно идиоматические angularjs и я Wouldn» t начать микро-оптимизировать его. (Помните, «Преждевременная оптимизация есть корень всех зол», а также правила Майкла А. Jacksons об оптимизации и других цитатах - http://en.wikipedia.org/wiki/Program_optimization)

Нет, я не думаю, что есть какой-либо разумный способ сделать это без JQuery (или, по крайней мере, jqLite или ручной доступ к дому). Если вы это сделаете, вы должны инкапсулировать его в директиве (которая, возможно, является единственным явным доступом/манипуляцией DOM).

0

Можете ли вы использовать ng-blur вместо ng-enter, а затем проверить, не загрязнена ли модель, а затем выполнить вызов службы?

AngularJS устанавливает классы CSS ng-pristine и ng-dirty в любом поле ввода, на котором вы использовали ng-model, и ваш контроллер имеет свойства $ pristine и $ dirty, которые вы можете проверить, чтобы увидеть, является ли форма грязный или нет.

Это может быть немного более оптимизировано. Тем не менее, я бы все же сделал это в директиве.

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