最近我必须使用一个输入元素同时使用ng-disabled和一个自定义指令,它使用隔离范围来评估表达式,就像ng-disabled正在做的那样,不知何故,自定义指令工作正常但ng-disabled没有,因为它只评估孤立范围内的表达式.
自定义指令非常简单,如:
angular
.module('directives', [])
.directive('conditionalAutofocus', function () {
return {
restrict:'A',
scope:{
condition:'&conditionalAutofocus'
},
link:function (scope, element, attrs) {
if (scope.condition()) {
attrs.$set('autofocus','true');
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
而页面看起来像:
<input name="pin"
ng-model="pin"
type="password"
required
ng-disabled="names == null"
conditional-autofocus="names != null" />
Run Code Online (Sandbox Code Playgroud)
有人已经解决了这个问题吗?
提前致谢!雅尼
And*_*nik 19
我有同样的问题,也是最简单的解决方案.是使用隔离范围来继承ngDisabled的属性.
angular.module('directives', [])
.directive('conditionalAutofocus', function () {
return {
restrict:'A',
scope:{
condition:'&conditionalAutofocus',
disabled:'=ngDisabled'
},
link:function (scope, element, attrs) {
if (scope.condition()) {
attrs.$set('autofocus','true');
}
if(scope.disabled){
//is disabled
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
可能只适用于限制:'E'.没有测试别人
好的,对于我自己的上述情况,我的解决方案是更改指令的实现,不再使用隔离范围:
angular.module('directives', [])
.directive('conditionalAutofocus', function () {
return {
restrict:'A',
link:function (scope, element, attrs) {
scope.$watch(attrs.conditionalAutofocus, function(){
if (scope.$eval(attrs.conditionalAutofocus)) {
element.focus();
}else{
element.blur();
}
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18513 次 |
| 最近记录: |