0

Я пытаюсь запустить код во время обратного вызова ссылки на директиву ngModel, используя AngularJS в поле выбора, которое использует ngOptions.AngularJS ngModel Directive с полем выбора и ngOptions

module.directive("ngModel",function(){ 
    console.log('ng-model called'); 
    return { 
     restrict: 'A', 
     priority: -1, // give it lower priority than built-in ng-model 
     link: function(scope, element, attr) { 
     console.log('watching'); 
     scope.$watch(attr.ngModel,function(value){     
      if (value){ 
       console.log("changing"); 
      } 
     }); 
     } 
    } 
}); 

Смотрите эту скрипку, который демонстрирует эту проблему: http://jsfiddle.net/d3r3zwLj/3/

Первое поле выбора заполняется с использованием нг-опций, в то время как второй имеет свои варианты явно выписанный в HTML. Если вы откроете консоль, вы увидите, что вы видите только «изменение» сообщения при изменении второго поля выбора. Изменение первого ничего не делает.

Вы также сразу заметите, что один раз вы видите только 'ng-model called' и 'watch', хотя есть два поля с ng-моделью на них.

Я ожидаю, что директива ngModel будет работать над обоими полями. Что такое ng-options, что мешает работе ngModel?

Спасибо!

ответ

0

Глядя на документ для нг-опций: https://docs.angularjs.org/api/ng/directive/ngOptions

"Директива Info Эта директива выполняет на приоритетном уровне 0."

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

0

Когда вы используете директиву ng-options, у нее есть другая необязательная директива ng-model, которая фактически устанавливает значение по умолчанию, которое будет отображаться из параметров. Итак, в вашем случае во втором списке нет директивы ng-options, которая делает ng-модель похожей на обычную. Возможно, вы можете просто изменить название своей директивы.

0

Это плохой способ обновить функциональность встроенной директивы, decorators есть для этой цели. Проверьте documentation

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