Мне наконец удалось получить точку останова в нужном месте.AngularJS устанавливает функцию ссылки по умолчанию для атрибутов «логический» («обязательный», «отключенный» и т. Д.), За исключением атрибута «множественный».
Наблюдаются логические атрибуты, а $set
метод attr
используется для изменения DOM.
Похоже, что фактический requiredDirective
в вопросе имеет дело только с обновлением проверки, когда значение ng-обязательное изменяется.
Соответствующий код (снова от GitHub ):
var ngAttributeAliasDirectives = {};
// boolean attrs are evaluated
forEach(BOOLEAN_ATTR, function(propName, attrName) {
// binding to multiple is not supported
if (propName === 'multiple') return;
function defaultLinkFn(scope, element, attr) {
scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) {
attr.$set(attrName, !!value);
});
}
var normalized = directiveNormalize('ng-' + attrName);
var linkFn = defaultLinkFn;
if (propName === 'checked') {
linkFn = function(scope, element, attr) {
// ensuring ngChecked doesn't interfere with ngModel when both are set on the same input
if (attr.ngModel !== attr[normalized]) {
defaultLinkFn(scope, element, attr);
}
};
}
ngAttributeAliasDirectives[normalized] = function() {
return {
restrict: 'A',
priority: 100,
link: linkFn
};
};
});