2016-10-21 21 views
0

angularjsに条件付き属性を追加するにはどうすればよいですか?条件付き追加html属性を追加するには?

たとえば、属性を<select>に設定するには、コンポーネントのバインディングがtrueに設定されている必要があります。つまり、バインディングが指定されていない場合、複数の属性が私の<select>に存在すべきではありません。

私が見つけた唯一の解決策はng-ifでした。

+1

の可能性のある重複した[条件付き角度に属性を適用するための最良の方法は何?](http://stackoverflow.com/questions/15696416/what-is-the-best-条件付きでアトリビュートを適用する) – ksav

+0

ng-if、ng-show ... – Jigar7521

+0

multiple = "{{yourVar}}"で試しましたか? –

答えて

0

ブールconditionは、あなたがのプロパティmultipleを処理するために(別名ng-multiple)ディレクティブを実装することによって、これを達成することができません

<select ng-if="condition" ng-model="some.model" multiple></select> 
<select ng-if="!condition" ng-model="some.model"></select> 


<select ng-show="condition" ng-model="some.model" multiple></select> 
<select ng-hide="condition" ng-model="some.model"></select> 

コントローラ、

$scope.condition = true

1

他に、複数のその後、真である場合select要素。次のスニペットは、このソリューションを実装しています。しかしmultiple小道具で選択された値の配列が生成されると、小包でmultiplenon-multipleの間で切り替えるときに問題が発生する可能性があるので、non-multipleが単一のオブジェクトを生成すると、このdirectiveの内部でモデルの状態を制御できます。

angular.module('myApp', []) 
 
    .directive('ngMultiple', function() { 
 
    return { 
 
     require: ['select', '?ngModel'], 
 
     restrict: 'A', 
 
     scope: { 
 
     multiple: '=ngMultiple' 
 
     }, 
 
     link: function (scope, element, attrs, ctrls) { 
 
     
 
     element.prop('multiple', scope.multiple); 
 
     
 
     scope.$watch('multiple', function (multiple) { 
 
      if(element.prop('multiple') != multiple){ 
 
      // may be would be convenient change the ngModel 
 
      // to [] or {} depending on the scenario 
 
      element.prop('multiple', multiple); 
 
      } 
 
     }); 
 
     } 
 
    }; 
 
    }) 
 
    .controller('myController', function ($scope) { 
 
    $scope.condition = true; 
 
    $scope.myOptions = []; 
 
    }); 
 

 
angular.element(document).ready(function() { 
 
    angular.bootstrap(document, ['myApp']); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
 
<div ng-controller="myController"> 
 
    <label> 
 
    <input type="checkbox" ng-model="condition" /> multiple? 
 
    </label> 
 
    <br> 
 
    <select ng-multiple="condition" ng-model="myOptions"> 
 
    <option>Option 1</option> 
 
    <option>Option 2</option> 
 
    <option>Option 3</option> 
 
    <option>Option 4</option> 
 
    <option>Option 5</option> 
 
    </select> 
 
    <br> 
 
    <tt>myOptions: {{ myOptions }}</tt> 
 
</div>

関連する問題