У меня есть форма ярлык, содержащий вход:Угловые: директива доступа к элементу формы
<label data-live-email-check="http://www.example-service-uri.com/">
<span class="embedded-label">Email</span>
<input ng-model="formData.email"
type="email"
name="email"
placeholder="Email"
required/>
<span class="message" ng-show="emailValidationMessage">{{emailValidationMessage}}</span>
</label>
Я хочу создать директиву, которая принимает URL, предоставленный атрибутом данных живых электронных проверочного и отправляет электронной почты на этот URL-адрес, проверяя, существует ли он или нет.
angular.module("App").directive("liveEmailCheck", [function() {
return {
restrict: "A",
scope: {
ngModel: "="
},
link: function (scope, element, attrs) {
scope.$watch(
function(){
return scope.ngModel
},
function(newVal){
console.log(newVal);
}
);
}
}
}]);
Я просто хочу посмотреть модель на входе и запустить запрос при его обновлении. Поскольку директива определена на элементе метки ngModel не привязана должным образом. Что я делаю не так? Мое выражение часов не регистрирует ничего, потому что оно никогда не срабатывает.
Я знаю, что могу вручную захватить вход, но это похоже на то, что я нарушу «угловой узор», который я чувствую так «привязан». Неудача заключается в том, что, кажется, существует так много способов сделать все в Angular, что я не могу сказать, правильно ли я приближаюсь к проблеме.
--Edit--
Чтобы обеспечить решение, которое я лично бы взять (из-за незнания «лучшего» пути), были бы следующие:
angular.module("App").directive("liveEmailCheck", [function() {
return {
restrict: "A",
require: ["^form"],
link: function (scope, element, attrs, ctrl) {
var formCtrl = ctrl[0];
scope.formEl = formCtrl[element.find("input").attr("name")];
scope.$watch(function(){return scope.formEl.$valid},
function(newVal){
console.log(newVal);
});
}
}
}]);
Это работает , но я чувствую, что он «нарушает угловые правила».
Почему вы используете его на этикетке? Являются ли этикетки и их содержимое инкапсулированы в другую директиву? –
Да, они есть, но это неважно (один должен иметь возможность использовать его без этой директивы об упаковке). Важно то, что emailValidationMessage должен отвечать в соответствии с областью действия директивы. Его вводящее в заблуждение имя, потому что это не проверка, его проверить, существует ли электронное письмо. – dudewad
Как вы проверяете, существует ли почта или нет с реализацией, предусмотренной в блоке редактирования? –