Я работаю на директивы проверки ниже, предложил мне в this answer:Как я должен упаковать функции плагина для использования в директиве проверки?
MyBigAngularApp.directive("bkNgValidation", function ($compile) {
return {
priority: 10000,
terminal: true,
link: function (scope, element, attrs) {
var validationType = attrs.bkNgValidation;
window["addValidationFor_" + validationType](element);
// prevent infinite loop
element.removeAttr("bk-ng-validation");
$compile(element)(scope);
}
};
});
Тогда, когда я применяю эту директиву к HTML элемент, в форме, bk-ng-validation="phoneNumber"
, моя директива вызывает эту функцию:
function addValidationFor_phoneNumber(element) {
element.attr("ng-pattern", "/^[0-9]+$/");
element.attr("ng-minlength", 5);
element.attr("ng-maxlength", 8);
alert("yeah baby");
}
Этот addValidationFor_phoneNumber
в настоящее время относится к глобальному пространству имен, только для моего доказательства концепции, но я ищу, возможно, использование раскрывающего модуля для организации того, что может стать довольно большим количеством функций проверки достоверности. Или есть какой-то другой образец, за которым я должен следовать, потому что я работаю внутри Angular? Я подозреваю, что могу сделать что-то вроде объявления константы для раскрывающего модуля и ввести его в директиву, но я думал, что задаю этот вопрос, прежде чем идти слишком далеко по неправильной дороге.
Спасибо, отличный ответ для noob (меня, а не вы). Мне очень нравится идея сервиса, чтобы разделить проблемы связывания элемента с функцией, то есть директивы, и выполнения этой функции, то есть службы, но только сейчас, только один раз, я собираюсь использовать подход частных методов, чтобы ограничить мой набег в угловое пространство. – ProfK
Yep-сервисы становятся действительно полезными, как только вам нужно как минимум делиться информацией между двумя директивами. Но тогда, если у них есть сильная иерархия (т. Е. Dir2 всегда внутри dir1), некоторые предпочтительные методы привязки или наследования, вы можете столкнуться с этими случаями позже, если будете продолжать использовать эту замечательную структуру :) – floribon