6
如何创建一个将其他指令添加到元素的指令?指令,将其他指令添加到angular.js中的相同元素
例如,我想:
<input ng-pattern='/[\\w\\d]+/' ng-maxlength='10'/>
如何创建一个将其他指令添加到元素的指令?指令,将其他指令添加到angular.js中的相同元素
例如,我想:
<input ng-pattern='/[\\w\\d]+/' ng-maxlength='10'/>
我想出了,似乎工作的解决方案:
.directive('tag', ['$compile', function($compile) {
return {
priority: 1000,
terminal: true,
compile: function(telement, attrs) {
attrs.$set('tag', null);
attrs.$set('ngMaxlength', '10');
attrs.$set('ngPattern', '/[\\w\\d]+/');
var link = $compile(telement);
return function($scope, $element) {
link($scope, function(clonedElement) {
$element.replaceWith(clonedElement);
});
}
}
}
}]);
的关键是
<input tag/>
为被链接确保该指令比元素上的所有其他指令具有更高的优先级并终止,以便其他目录ectives不被编译和链接。
我不认为$compile()
,链接功能,或terminal
是必要的。 Angular会自动为我们编译telement
。
.directive('tag', [function() {
return {
priority: 1000,
compile: function(telement, attrs) {
attrs.$set('tag', null);
attrs.$set('ngMaxlength', '10');
attrs.$set('ngPattern', '/[\\w\\d]+/');
}
};
}]);
测试这个HTML:
<input ng-model="test" ng-init="test=2" tag>
{{test}}
感谢您指出attrs。$设置给我!但是,似乎并没有用这个来设置ng模型。任何想法为什么不呢?对你的plunker的修改显示:http://plnkr.co/edit/ad2zIbNqW800KZi2Ulxn?p=preview – MrException 2013-07-12 21:02:52
@MrException,我不知道为什么它不起作用。这里有一个关于这个问题的问题:http://stackoverflow.com/questions/17405790/adding-ngmodel-to-input-with-a-directive – 2013-07-14 02:16:51
超级@马克,我一直拉着我的头发尝试'attrs。 $ set('ng-pattern')'并不理解为什么它在html中看起来完全相同,但没有任何事情发生。我想要说明的是,在我对当前的Firefox和Chrome以及Angular 1.0.7进行的快速测试中,至少“优先级:1000”对于模式ng验证工作似乎并不需要。 – Daryn 2013-12-09 20:30:21