如何让ng-disabled指令适用于隔离范围

yi *_* mo 14 scope angularjs

最近我必须使用一个输入元素同时使用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'.没有测试别人


yi *_* mo 2

好的,对于我自己的上述情况,我的解决方案是更改指令的实现,不再使用隔离范围:

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)