У меня есть поле ввода текста, которое я хочу изменить каждые несколько секунд. Однако я не хочу загрязнять мой контроллер этим, поэтому я хочу инкапсулировать эту функциональность в директиву.Замена заполнителя через директиву AngularJS?
Это то, что моя директива выглядит следующим образом:
myApp.directive('searchBox', ['$interval', function($interval) {
return {
restrict: 'A',
link(scope, element, attrs) {
$interval(function() {
attrs.placeholder = 'New';
}, 1000);
}
}
}])
И в HTML:
<input type="text" class="form-control" placeholder="Old" ng-model="search" search-box>
Однако заполнитель упорно не меняется, даже если в консоли attrs.placeholder
можно увидеть изменения to 'Test' из 'Hello'. Есть идеи?
PLUNKR: https://plnkr.co/edit/Oy1M8FPTXxzB9oYMJqlx?p=preview
Пусть вы и ваши дети будете благословлены навеки. – Aron
В чем разница между этими двумя методами? – Aron
Посмотрите сами: https://github.com/angular/angular.js/blob/b94626cb9bc03a067feb7c6f0302f811edfd8e67/src/ng/compile.js#L1537 В принципе, 'attrs. $ Set' позволяет вам использовать интерполяцию в вашем значении (например, 'attrs. $ set ('placeholder', 'Test {{myVar}}')', а ключ атрибута «нормализован» à-la-Angular, что означает обновление атрибута 'data-foo', который вы бы используйте 'dataFoo' как ключ ' element.attr' - это просто регулярное обновление атрибута DOM. – Iso