datepicker
, datepicker-language
和ng-required="true"
如果我尝试添加这些属性,然后使用 $compile
,我显然会生成一个无限循环,所以我正在检查是否已经添加了所需的属性:
angular.module('app')
.directive('superDirective', function ($compile, $injector) {
return {
restrict: 'A',
replace: true,
link: function compile(scope, element, attrs) {
if (element.attr('datepicker')) { // check
return;
}
element.attr('datepicker', 'someValue');
element.attr('datepicker-language', 'en');
// some more
$compile(element)(scope);
}
};
});
当然,如果我不$compile
元素,属性将被设置,但指令不会被引导。
这种方法是正确的还是我做错了?是否有更好的方法来实现相同的行为?
UDPATE:鉴于$compile
是实现这一目标的唯一方法,是否有一种方法可以跳过第一次编译传递(元素可能包含多个子元素)?也许通过设置terminal:true
?
更新2:我已经尝试将该指令放入select
元素中,正如预期的那样,编译运行了两次,这意味着预期的__abc1数量是预期的两倍。