Я создаю директиву smart input
, которая будет обертывать элемент ввода текста, и ей требуется доступ к модели элемента ввода, чтобы манипулировать некоторыми классами в директиве.
Поскольку элемент ввода может быть одним из многих типов (текст, электронная почта, пароль), мне нужно включить директиву и иметь возможность добавлять различные типы проверки для каждого из них.
Проблема, с которой я сталкиваюсь (как и со многими другими в Интернете), заключается в наследовании области видимости.
Вот как выглядит мой текущий код
HTML
<smart-input ng-model="username">
<span ng-show="isTyping">{{ placeholder }}</span>
<input type="text" name="username" ng-model="username" ng-minlength="4" ng-maxlength="20" required />
</smart-input>
JS
angular.module('myApp').directive('smartInput', function ($compile) {
return {
restrict: 'E',
transclude: true,
replace: true,
scope: {
model: '=ngModel'
},
template: '<div class="text-input" ng-class="{typing: isTyping}" ng-transclude>' +
'</div>',
link: function(scope, element, attrs) {
scope.isTyping = false;
scope.$watch('model', function(value) {
console.log(value);
scope.isTyping = value.length > 0;
});
}
};
});
По сути, value
внутри функции $watch не определено, поэтому, очевидно, я делаю это неправильно.
Итак, как я могу привязать модель к полю ввода, в то время как директива имеет ссылку на тот же объект и может watch
его значение?
ng-model="$$prevSibling.model"
plnkr.co/edit/DjQibwb5cmIVIFJzcEie ?p=preview, но без$$prevSibling
, правильно? - person Khanh TO   schedule 03.02.2014