【问题标题】:Toggling ng-selected切换 ng-selected
【发布时间】:2015-12-03 22:55:35
【问题描述】:

我正在尝试在 Angular 中切换 ng-selected 选项,但遇到了一些困难。这是我正在尝试的:

<select ng-model="datacut.ages" multiple>
   <option value="" disabled="disabled">Please Select</option>
   <option value="0-15" ng-click="toggleSelect(datacut, '0-15')" ng-selected="datacut.ages.indexOf('0-15') !== -1">15 and Younger</option>
   <option value="16-19" ng-selected="datacut.ages.indexOf('16-19') !== -1">16 - 19</option>
   <option value="20-24" ng-selected="datacut.ages.indexOf('20-24') !== -1">20 - 24</option>
</select>

控制器:

$scope.toggleSelect = function(dc, str){
    dc.ages.splice(dc.ages.indexOf(str), 1);
    //e.currentTarget.selected = !e.currentTarget.selected;
};

问题是当我点击一个选项时,鼠标按下时被选中,而释放时被取消选中。注释掉的代码也做同样的事情。

我觉得这应该有一个简单的解决方案,但我真的想不出一个优雅的解决方案。

任何帮助将不胜感激。

编辑:为了澄清 - 我需要能够没有选择任何内容,因此单击单个选定元素需要取消选择它。我还需要能够选择多个选项。

【问题讨论】:

  • 为什么有toggleSelect?该功能会从模型中删除您的选择,即该选项将永远不会被选中,这就是它未被选中的原因。如果您删除 ng-click 和所有 ng-selected 它工作正常
  • 是的,我将添加一个编辑以澄清,但我希望能够取消选择事物(以便没有选择任何内容)

标签: javascript angularjs angular-ngmodel


【解决方案1】:

您正在使用ng-model,它为您带来了魔力。所以ng-clickng-selected 是不必要的。看我的工作fiddle

<select ng-model="datacut.ages" multiple>
  <option value="" disabled="disabled">Please Select</option>
  <option ng-value="'0-15'">15 and Younger</option>
  <option ng-value="'16-19'" >16 - 19</option>
  <option ng-value="'20-24'" >20 - 24</option>
</select>

【讨论】:

  • 您可以选择和取消选择选项吗?所以你可以选择'0-15'然后取消选择它以便什么都没有选择?如果是这样,我的程序还有其他问题
【解决方案2】:

您似乎想从年龄模型中删除选定的年龄。然后你需要使用 ng-change 指令。并删除 ng-click 或 ng-selected。但是让 ng-model 访问删除所选项目的方法上的值。 见我的plunker

 <select multiple name="ages" unseletable forbiden-opt="datacut.MIN_AGE" ng-model="datacut.chosenAge">
        <option value="" disabled="disabled">Please Select</option>

        <option ng-repeat="age in datacut.ages" value="{{age}}">
          {{age}}
        </option>
      </select>

编辑:这应该在指令中进行,因为您需要更新选项 html 以取消选择该选项。

【讨论】:

  • 是的,这就是splice 所做的,它从数组中删除了项目,我从控制器的年龄属性中创建了组合框的选项
  • 好的。我需要在列表中保留所有可能性。我正在拼接以尝试将它们从关联的 ng-model 中删除(这会将它们从被选中中删除)
  • 我很困惑。如果您知道一个选项不应该是可选的,为什么不禁用它呢?这不是更好的选择吗?
  • 所有选项都是“可选择的”。我只想能够单击选定的选项并取消选择它。除非我得到一个好的解决方案,否则我可以使用命令点击来完成。
  • @Dave M 所以我将实现更改为指令,因为必须手动取消选择具有“坏”值的选项。
猜你喜欢
  • 2017-04-02
  • 2019-09-21
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 2016-11-05
  • 2017-01-16
  • 1970-01-01
  • 2015-05-10
相关资源
最近更新 更多