3

我正在尝试<md-autocomplete>此处的示例md-chips

为了防止选定的项目进入,<md-autocomplete>我修改了 querySearch 函数,如下所示:

function querySearch (query) {
    var results = query ? self.searchData.filter(createFilterFor(query)) : [];
    var finalResults = [];
    angular.forEach(results, function(result) {
        if($scope.selectedItems.indexOf(result.name) < 0) {
            finalResults.push(result);
            updateSelectedItems(result);    
         }
    });
    return finalResults;
}

但我的问题是,一旦我们选择了一个项目,控件就不会进入这个函数。有人可以解释如何解决这个问题吗?

4

2 回答 2

3

我从这个文档中找到了解决方案:md-autocomplete

我们只需要在每次搜索查询项时添加md-no-cache="true"for 调用该函数querySearch

于 2015-05-19T16:49:46.647 回答
1

对我有用的解决方案: md-autocomplete 上的 md-no-cache="true" 仍然是强制自动完成重新初始化 md-items 的必要条件;md-chips 应该设置 md-on-remove 和 md-on-append 并实现从列表中删除芯片,或将芯片添加到列表中;

我的代码如下所示: HTML:

 md-on-remove="removeTagChip($chip)"
 md-on-append="appendTagChip($chip)"

JS:

$scope.removeTagChip = function (chip) {
    var chipPos = $scope.getPosition(chip.Id, $scope.ChipTags);
    if (chipPos < 0) {
        $scope.ChipTags.push(chip);
    }
};
$scope.appendTagChip = function (chip) {
    var chipPos = $scope.getPosition(chip.Id, $scope.ChipTags);
    if (chipPos > -1) {
        $scope.ChipTags.splice(chipPos, 1);
    }
    return chip;
};

$scope.getPosition 只是返回芯片在芯片列表中的位置;

于 2015-10-09T11:26:56.630 回答