Я создаю директиву для input
. Мне нужно изменить имя класса, если вход не пуст:
return {
restrict: "C",
link: function(scope, elem, attr) {
elem.find('input, textarea').bind('focus', function() {
elem.find('label').addClass('active');
});
elem.find('input, textarea').bind('blur', function(self) {
if (self.target.value == '') elem.find('label').removeClass('active');
});
elem.find('input, textarea').bind('change', function(self) {
if (self.target.value != '') elem.find('label').addClass('active');
});
}
}
Вот мой ввод:
<div class="input">
<input type="text" name="name" ng-model="name" />
<label for="name">Name</label>
</div>
Focus and blur
работают нормально. Но change
нет. value = ''
нагрузки value = ''
. Но мой $scope.name
не пуст.
Как изменить имя класса, если ng-model
не пуста при загрузке?
ОБНОВИТЬ:
setTimeout(function() {
if (elem.find('input, textarea').val() != '') elem.find('label').addClass('active');
}, 100);
Оно работает. Но я думаю, может быть, в некоторых старых браузерах это должно быть 200 мс или 1000 мс...
Я думаю, вы можете использовать $timeout(function() {... })
с 0 секунд ожидания или $scope.$evalAsync()
.
Более подробную информацию вы найдете на http://www.bennadel.com/blog/2605-scope-evalasync-vs-timeout-in-angularjs.htm