【问题标题】:Converting md-switch to md-select将 md-switch 转换为 md-select
【发布时间】:2017-07-10 22:51:18
【问题描述】:

我正在使用AngularJs 开发这个动态过滤系统,并试图弄清楚如何将colorsize 选项转换为两个下拉列表(每个类别一个)。

我尝试了以下代码,它成功地添加了下拉菜单以及选择框中的选项,但是单击其中一个选项后,它不会选择它。

<md-select ng-model="filter[cat][value]" placeholder="val" multiple>
  <md-option ng-repeat="value in getItems(cat, data)" ng-value="{{value}}" ng-init="filter[cat]={}">
    {{value}}
  </md-option>
</md-select>

演示:https://codepen.io/mikelkel/pen/rwQKRm(以上代码已从此演示中删除。)

【问题讨论】:

  • 您不使用 ng-options 是否有特殊原因?
  • 嗨@Chet 我仍然熟悉 Angular。您能否建议我如何使用 ng-options?

标签: javascript angularjs md-select


【解决方案1】:

有几个问题:

根据文档,multiple 是一个布尔值,所以它必须是 multiple="true"。

ng-model 中的value 不存在于该范围内,因为它只存在于md-option 中,因此您不能执行filter[cat][value]。如果您查看md-select 的文档,您会发现当使用多个模型时,模型是一个数组。因此,如果您将ng-model 设置为简单的filter[cat],那么它的值将类似于["red","yellow"]

然后您可以修改 filterByPropertiesMatchingAND 使其与类似属性进行字符串匹配(因此,如果衬衫颜色为红色且 filter.color 数组包含红色,则您将返回 true)。

我 fork 你的 codepen (https://codepen.io/czema/pen/KqbpPE) 并进行了以下更改:

尽管ng-init 在我离开时不受欢迎,但我将filter[cat] 初始化为一个数组而不是一个对象。

我删除了 md 项。

我将ng-model 设置为filter[cat]multiple="true"

在 Javascript 中,我修改了您的 filterByPropertiesMatchingAND 函数。现在它期望$scope.filter 包含每个属性的数组(而不是具有颜色名称和布尔值的对象)。我删除了noSubFilter 函数。

【讨论】:

  • 非常感谢,@Chet!
【解决方案2】:

select 中使用ng-options,而不是在option 标签上使用ng-repeatng-options 的语法有点奇怪,但在你的情况下会是这样的:ng-options="value for value in getItems(cat, data)"

阅读 ngOption https://docs.angularjs.org/api/ng/directive/ngOptions 的文档

至于为什么您的上述尝试不起作用,可能与ng-init 有关,该ng-init 正在为每个选项执行并且可能正在清除所有现有数据。不要使用ng-init

【讨论】:

  • 谢谢!我会进一步研究您的建议和参考文档。
  • 嗨@Chet,我尝试了许多修改 md-select 以使其工作的变体,但没有运气。上面链接的演示是我最后一次尝试包含 md-select。您介意进一步解释或提供一个工作示例吗?
  • 我把 md-select 误认为是常规选择,所以我的回答是完全错误的。我将添加另一个可能会有所帮助的答案。
猜你喜欢
  • 2015-06-16
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
相关资源
最近更新 更多