javascript - 如果没有选择任何选项,则禁用按钮angularJS

标签 javascript html angularjs angularjs-directive scope

如果没有选择列表中的任何选项,或者如果所选类不在列表中,我想禁用添加按钮。

HTML:

<div ng-repeat="json in myJson" ng-class="{'selected': json.selected}" ng-model="selectionOptions" ng-click="selectItem($index)">
  {{json.title}}
</div>
<button ng-disabled="hideAdd">Add</button>

我试过:

 $scope.$watch('selectionOptions', function(val) {
    if(angular.element('selectionOptions').hasClass('selected')) {
        $scope.hideAdd = false;
    } else {
        $scope.hideAdd = true;
    }
  });

JSFiddle Demo

最佳答案

不需要指令或 $watch。

删除 ng-model 因为它什么都不做。即使它确实有效,每个项目也会绑定(bind)到同一个变量。

使用 ng-click 调用 $scope 上的函数,该函数切换所选值并将其添加/从所选选项列表中删除。

您可以使用 ng-show="selectedOptions.length" 来隐藏/显示添加按钮。

angular.module('app', []).controller('mainCtrl', function($scope) {
  $scope.myJson = [{
    title: 'test1',
    selected: false
  }, {
    title: 'test2',
    selected: true
  }, {
    title: 'test3',
    selected: false
  }, {
    title: 'test4',
    selected: false
  }];

  // Initialize array with already selected options
  $scope.selectedOptions = $scope.myJson.filter(function(item) {
    return item.selected;
  });

  $scope.toggle = function(item) {
    // Toggle selected
    item.selected = !item.selected;

    // Add it to list
    if (item.selected) {
      $scope.selectedOptions.push(item);
    } else {
      // Remove it from list
      $scope.selectedOptions.splice($scope.selectedOptions.indexOf(item), 1);
    }
  };
});
.selected {
  background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app='app' ng-controller='mainCtrl'>
  <div app-click="">
    <div ng-repeat="json in myJson" ng-click="toggle(json)" ng-class="{'selected': json.selected}">
      {{json.title}}
    </div>
    <button ng-show="selectedOptions.length">Add</button>
  </div>

  <br/>Selected options: <pre>{{selectedOptions | json}}</pre>
</div>

关于javascript - 如果没有选择任何选项,则禁用按钮angularJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291862/

相关文章:

当 ng-show 为 false 时,AngularJS 动画不会立即停止

javascript - Angular.js - 用户界面路由器 |如何确保 $stateParams.anyParam 的值为整数?

javascript - 可以用 `onEnter` 延迟组件渲染吗?

javascript - 你能在 javascript 中命名一个函数 click 吗?

javascript - 尝试从 jQuery.get() 返回值,总是以未定义结束

python - 一个快速的 Python HTML 解析器

javascript - 如何将幻灯片合并到 HTML 中?

javascript - 如何使 html 和 javascript 代码同时可重用?

angularjs - 寻找有关如何构建单页应用程序的说明

javascript - 是否有更简单的方法来创建数组中先前值的总和?