Вызвать событие после привязки модели к текстовому полю - Angular
Я хочу реализовать событие что-то вроде binding-completed
для каждого текстового поля (ввода) в моем приложении.
Здесь я пытаюсь добавить класс CSS на некоторых условиях в onblur
событие. Все в порядке. Но я не хочу выполнять ту же функцию после привязки какой-либо модели к текстовому полю.
var app = angular.module("main", []);
var MainController = function($scope, $http) {
$scope.message = "CSS Change";
};
app.directive('floatBox', ['$document', '$timeout', '$rootScope', function($document, $timeout, $rootScope) {
return {
restrict: 'A',
scope: true,
link: function(scope, element, attr) {
//this is not for validation, this is just a sample for what I want to do.
//Please don't suggest Angular validations.
element.on('blur', function(event) {
changeCSSClass(element);
});
function changeCSSClass(element) {
if (element.val().length == 0) {
element.addClass('red');
element.removeClass('green');
} else {
element.addClass('green');
element.removeClass('red');
}
}
}
};
}]);
HTML:
<div ng-controller="MainController">
<input float-box type="text" ng-model="message">
</div>
CSS:
.red {
border: 5px solid red;
}
.green {
border: 5px solid green;
}
Я хочу позвонить changeCSSClass
после того, как какое-то значение пришло в мое текстовое поле.
Пожалуйста, используйте плагин для быстрого редактирования: http://plnkr.co/edit/NTjcV4KDHRVZasoCJz6l?p=preview
Основная проблема: когда я blur
из текстового поля событие работает штрафами. Но я хочу показать цвет в самой начальной загрузке, т.е. после привязки модальной message
в текстовое поле. Так что я получу длину текстового поля и на основании этого я могу установить класс CSS
Я не хочу использовать ng-класс во всех текстовых полях и использовать область видимости, скорее требуется общая реализация.
1 ответ
Вы можете связать свои данные с вашей директивой и использовать $watch
:
директива
(function(){
function directive(){
return {
restrict: 'A',
link: function(scope, element, attr) {
//this is not for validation, this is just a sample for what I want to do.
//Please don't suggest Angular validations
scope.$watch(attr.ngModel, function(){
changeCSSClass(element);
});
function changeCSSClass(data) {
if (data.length == 0) {
element.addClass('red');
element.removeClass('green');
} else {
element.addClass('green');
element.removeClass('red');
}
}
}
};
};
angular
.module('app')
.directive('floatBox', directive);
})();
HTML
<input float-box type="text" ng-model="message">