2
我創建基本上是用作<input>
但有一些特殊功能的指令:將自定義指令的屬性傳遞給子元素的簡單方法?
app.directive('skInput', function(){
return {
restrict: 'A',
replace:true,
template: '<div style="display:inline-block">\
<span ng-show="disabled">{{model}}</span>\
<input ng-hide="disabled" placeholder="{{placeholder}}" type="text" class="sk-input" ng-model="model" stop-event ng-required="isRequired"/>\
</div>',
require: ['ngModel'],
scope:{
'width':'@',
disabled: '=ngDisabled',
model: '=ngModel',
placeholder: '@'
},
link: function(scope, elem, attrs){
if(angular.isDefined(scope.width)){
elem.find('input').css('width', scope.width);
}
if(angular.isDefined(attrs.required)){
scope.isRequired = true;
}else{
scope.isRequired = false;
}
}
}
});
的問題是,我希望把這個指令像input
其中可能包括一些指令或HTML5屬性如placeholder
,ng-pattern
,required
等。但是,我必須將指令的屬性連接到底層input
,就像您看到的那樣。
有沒有辦法告訴Angular將指令上的屬性放在<input>
元素上,而不是<div>
元素上?這樣,我可以這樣做<span sk-input ng-pattern="\regex\"></span>
,它會自動生成
<div>
<span ng-show="disabled"></span>
<input ng-pattern="\regex\" />
</div>
而不是
<div ng-pattern="\regex\">
<span ng-show="disabled"></span>
<input />
</div>