2014-09-13 76 views
4

如何創建禁用所有元素到div元素的指令?如何創建禁用所有元素爲div元素的指令

是這樣的:

<div div-disabled div-disabled-condition="state=='Stack'||state=='Over'||state=='Flow'"> 
    <input type="text"/> 
    <input type="url"/> 
    <div> 
    <input type="text"/> 
    <input type="url"/> 
    </div> 
<div> 

這可能嗎?我不知道 。

 angular 
    .module('uiRouterApp.ctrl.add', ['uiRouterApp.ctrl.customDirective']) 
    .controller('addCtrl', [ 
     '$scope', 
     '$location', 
     '$stateParams', 
     '$state', 
     function ($scope, $location, $stateParams, $state) { 
      $scope.state = {}; 
     } 
    ]).directive('divDisabled', function() { 
     return { 
     scope: { 
       divDisabledCondition: '@' 
      }, 
      link: function (scope, element, attrs) { 

      } 
     }; 
    }); 

更新:

請看到這一點:

<div class="col-sm-12 ng-isolate-scope" selected-object="SelectedAutoComplete" local-data="requirements.Item1" search-fields="NameFa,NameEn" title-field="NameFa" minlength="2" field-required="true" image-field="ImageUrl" disable-auto-compelete="response.State=='Success'||response.State=='Error'||response.State=='Warning'"> 

<div class="angucomplete-holder"> 
    <input id="_value" ng-model="searchStr" type="text" placeholder="select" class="form-control ng-dirty" ng-focus="resetHideResults()" ng-blur="hideResults()" autocapitalize="off" autocorrect="off" autocomplete="off" ng-change="inputChangeHandler(searchStr)" ng-disabled="response.State=='Success'||response.State=='Error'||response.State=='Warning'" style=""> 

    <!-- ngIf: showDropdown --> 
    </div> 
    </div> 

指令:

.directive('contentsDisabled', function() { 
     return { 
      compile: function(tElem, tAttrs) { 
       var inputs = tElem.find('input'); 
       for (var i = 0; i < inputs.length; i++) { 
        inputs.attr('ng-disabled', tAttrs['disableAutoCompelete']); 
       } 
      } 
     } 
    }) 

爲什麼當state是 '成功' 或 '錯誤' 或「警告'輸入沒有禁用?

回答

0

爲什麼不在每個輸入上使用ng-disabled對您所需的表達式?

https://docs.angularjs.org/api/ng/directive/ngDisabled


如果你真的不想要一個分組的指令,使用該指令的compile功能的嵌入式每個孩子ng-disabled屬性。或者使用一個不帶孩子的指令來表示哪些孩子申請ng-disabled

+0

因爲我使用這個:http://ghiden.github.io/angucomplete-alt/。這只是一個像這樣的div元素:'

' – 2014-09-13 11:30:43

2

您可以通過添加條件來創建一個在編譯期間更改其內容的指令。東西沿着這些路線(未經測試):

module.directive('contentsDisabled', function() { 
    return { 
    compile: function(tElem, tAttrs) { 
     var inputs = tElem.find('input'); 
     inputs.attr('ng-disabled', tAttrs['contentsDisabled']); 
    } 
    }; 
}); 

看到一個的jsfiddle這裏:http://jsfiddle.net/HB7LU/6380/

這樣做,你只是從contents-disabled複製表達成任何輸入ng-disabled屬性的缺點 - 如果有人使用了指令,反過來創建<input>元素,你不會選擇它們。

拿到FormController實例並迭代其所有控件,但不幸的是,AngularJS並沒有公開表單中的控件。也許提交功能請求?

+0

更新問題。 – 2014-09-13 15:14:54

+0

@ Football-Is-My-Life我認爲這只是因爲你的代碼中有很多錯別字。看到這裏的小提琴:http://jsfiddle.net/HB7LU/6380/ – 2014-09-14 14:25:36

+0

你可以分享什麼是在指令代碼(JsFiddle)內部有空循環的原因? – snowindy 2015-04-03 07:35:37

2

你也可以使用一個標籤字段集:

<form> 
    <fieldset ng-disable="foo"> 
     <input name="the_one"/> 
     <input name="the_second"/> 
    </fieldset> 
    <input name="the_thrid"/> 
</form> 

利用這種方式,當變量foo是TRUE,輸入 「the_one」 和 「the_second」 將被禁用。

+0

fieldset禁用在IE中不起作用。 (我相信野生動物園) – JesseNewman19 2016-02-12 21:58:48