AngularMaterial md-chips:不要在<md-autocomplete>中显示所选项目

时间:2015-05-19 16:25:10

标签: angularjs angular-material md-autocomplete md-chip

我在这里md-chips

尝试了<md-autocomplete>示例

为防止所选项目进入<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;
}

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

2 个答案:

答案 0 :(得分:3)

我找到了此文档中的解决方案:md-autocomplete

我们只需要添加HttpContext.Current.Server.ScriptTimeout = 300; ,以便在每次搜索查询项时调用md-no-cache="true"函数

答案 1 :(得分: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只返回芯片列表中芯片的位置;