在外部控制器$ scope的指令中设置ng-disabled

时间:2014-02-23 11:10:45

标签: angularjs angularjs-directive

链接小提琴包含一个带<select>的简单指令。我想通过在外部控制器中设置变量来禁用<select>标记。在devtools中,我看到ng-disabled的值从false更改为true,但<select>仍然有效。有人可以帮我解决我做错的事吗?

http://jsfiddle.net/bika/PRsH7/12/

2 个答案:

答案 0 :(得分:4)

尝试:

.directive( 'myTag', function() {
    return {
        restrict: 'E',
        scope: {
            isDisabled: '=' //use 2-way binding instead.
        },
        template: '<select ng-disabled="isDisabled"><option>not disabled</option></select>'
    };
});

HTML:

<my-tag is-disabled="isDisabled"></my-tag>

DEMO

答案 1 :(得分:2)

这是因为当使用“@”时,isDisabled是在字符串处计算的,而不是布尔值。 isDisabled是一个表达式,因此你应该使用“&amp;”把它传递给你的指令。

    .directive( 'myTag', function() {
      return {
        restrict: 'E',
        scope: {
          isDisabled: '&'
        },
        template: '<select ng-disabled="isDisabled()"><option>not disabled</option></select>',
      };
    });

小提琴:http://jsfiddle.net/bulbul/PRsH7/16/

更多参考:http://onehungrymind.com/angularjs-sticky-notes-pt-2-isolated-scope/ What is the difference between '@' and '=' in directive scope in AngularJS?

您可能还想观看John Lindquist关于指令的精彩视频:https://egghead.io/search?q=directive