【问题标题】:md-autocomplete - remove selected items in suggestionmd-autocomplete - 删除建议中的选定项目
【发布时间】:2017-01-02 04:38:34
【问题描述】:

当用户选择一个项目并标记为收藏时,我试图删除建议中的md-item。为了澄清这里的问题是下面的结构。

假设我们有states这个结构。

function loadAll() {

      var allStates = [
          {
             display : Alabama,
             value : alabama,
             is_favorite : false
          },
          {
             display : Alaska,
             value : alaska,
             is_favorite : false
          },
          {
             display : California,
             value : california,
             is_favorite : false
          },
          {
             display : Colorado,
             value : colorado,
             is_favorite : false
          },
          {
             display : Florida,
             value : florida,
             is_favorite : false
          },
          {
             display : Georgia,
             value : georgia,
             is_favorite : false
          },
      ];

      return allStates;
}

当用户选择我将它放在函数md-selected-item-change 上的对象时,我将状态标记为收藏。

function selectedItemChange(object) {
    if (object) {
        object.is_favorite = true;
    }
}

现在可以更改createFilterFor() 以在选择特定状态后从结果中排除具有is_favorite == true 的状态?

function createFilterFor(query) {
  var lowercaseQuery = angular.lowercase(query);

  return function filterFn(state) {
    return (state.value.indexOf(lowercaseQuery) === 0);
  };

}

这是我迄今为止尝试过的,但它没有呈现正确的结果。

return (state.value.indexOf(lowercaseQuery) === 0 && state.is_favorite == false);

更新

CODEPEN DEMO

【问题讨论】:

  • 请参考这个链接我想你可能会得到帮助:material.angularjs.org/latest/demo/chips
  • 你好,我在那个演示中找不到任何例子
  • 能否请您向我们展示您在 sn-p 中的完整运行代码
  • @AshishPatel 嗨,很抱歉没有尽快回复,我用一个有效的代码笔更新了我的问题。
  • 所以你想从dropdown中排除收藏夹?

标签: javascript angularjs angular-material md-autocomplete


【解决方案1】:

有一个简单的解决方法:

md-items="item in ctrl.querySearch(ctrl.searchText)| filter:{ is_favorite:false }"

您所要做的就是将过滤器放入您的控制源中。

请检查代码笔:http://codepen.io/ash972/pen/ZLYNPM

【讨论】:

  • 非常感谢您提供的简单解决方案
  • 乐于助人。
【解决方案2】:

创建一个这样的函数:

function filterFavotites(item) {
  return !item.is_favorite;
}

并在返回结果之前在querySearch 中调用它:

function querySearch (query) {
  var results = query ? vm.states.filter( createFilterFor(query) ) : vm.states,
      deferred;

  results = results.filter(filterFavotites);

  return results;
}

【讨论】:

  • 这也很有效,但 Ash 有一个简单的解决方案。感谢您的回答!
猜你喜欢
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-12-29
相关资源
最近更新 更多