md-autocomplete - 删除建议中的选定项目

md-autocomplete - remove selected items in suggestion

当用户选择了一个项目并将其标记为收藏时,我正在尝试删除建议中的 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;
}

这就是我在用户选择 object 时将状态标记为收藏所做的,我把它放在函数 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);

UPDATE

CODEPEN DEMO

像这样创建一个函数:

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;
}

有一个简单的解决方法:

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

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

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