【问题标题】:Disable ng-options value dynamically动态禁用 ng-options 值
【发布时间】:2018-06-23 01:02:30
【问题描述】:

我想禁用循环中的选择选项。到目前为止,我已经在以下链接中实现了。我想要它的工作方式,但我已经编写了很长的代码。有没有其他的实现方式。

Code Link

<div ng-controller="OptionsController">
<button value="add" ng-click="add()">
add
</button>
<div ng-repeat="val in v">
    <select ng-model="val.myColor" ng-change="call(c.name)">
        <option ng-repeat="c in colors" ng-disabled="c.shade=='dark'" value="{{c.name}}">
            {{c.name}}
        </option>
    </select>

</div>

</div>

【问题讨论】:

    标签: angularjs angularjs-ng-options angularjs-ng-disabled


    【解决方案1】:

    ng-options with disabled rows 有一些关于如何使用禁用选项的 ng-options 的详细信息。

    根据您当前对 ng-repeat 的使用情况:http://jsfiddle.net/rhz8hxL5/1/

    <div ng-controller="OptionsController">
      <button value="add" ng-click="add()">
        add
      </button>
      <div ng-repeat="val in v">
        <select ng-model="val.myColor" ng-change="call()">
          <option ng-repeat="c in colors" ng-disabled="isDisabled(c)" value="{{c}}">
            {{c}}
          </option>
        </select>
      </div>
    </div>
    

    JS - 为了演示的清晰,我稍微简化了一点

    angular.module('myApp', [])
    
    function OptionsController($scope, $timeout) {
      $scope.v = [{
        myColor: 0
      }];
    
      $scope.inUse = [];
      $scope.isDisabled = function(name) {
        return $scope.inUse.indexOf(name) !== -1;
      }
    
      $scope.colors = ['black', 'white', 'red', 'blue', 'yellow'];
    
      $scope.add = function() {
            $scope.v.push({});
      }
    
      $scope.call = function() {
        $scope.inUse = [];
    
        for(var i=0; i<$scope.v.length; i++) {
          var val = $scope.v[i];
    
          $scope.inUse.push(val.myColor);
        }
      }
    }
    

    英文:

    $scope.inUse 数组正在维护当前选定值的列表。当您更改下拉值时,它会调用 call 函数。该函数清空$scope.inUse 数组并用当前选定的值重新填充它。

    $scope.isDisabled 函数基于“如果它有一个索引它正在使用并因此被禁用”返回一个布尔值

    【讨论】:

    • 谢谢。但我不理解在禁用功能中使用索引。请你帮我设置选择框的默认值。假设如果我在星期五被选中,当我单击添加时,下一个选择框应该显示星期一。我还添加了删除按钮。即使删除正在工作,我也无法为下一次添加启用已删除的条目。请帮我处理这个流程。 Angular 对我来说是新的。
    • 在答案中添加了功能说明。如果您发布指向当前代码的链接,我可以查看
    • 谢谢。我理解了概念。这是我的更新链接jsfiddle.net/rhz8hxL5/2
    • jsfiddle.net/5u47mmto/1 有一个工作版本。将值设置为下一个可用(未选择)的颜色,假设如果您遇到列表末尾,则循环到列表的开头。如果使用了所有选项,我还更新了“添加”按钮以禁用。
    【解决方案2】:

    您的禁用方法非常简单且常见。您可以使用ngOptions 指令代替option 元素,并保存一两行。控制器中的代码量与禁用该选项关系不大。

    标记:

    <select ng-options="c as c.name disable when disableColor(c) for c in colors track by $index" 
        ng-model="val.myColor" ng-change="c.call(c.name)">
    </select>
    

    新的控制器功能:

    $scope.disableColor=function(c){
        return c.shade=='dark';
    }
    

    【讨论】:

    • 是 ng-disabled 没有应用于选择吗?
    • 你知道,你是对的,。我复制/粘贴了错误的语法。语法有一个禁用。 (查看更多here编辑原始答案。
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2013-04-18
    • 2017-05-05
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    相关资源
    最近更新 更多