angularjs - 删除所有芯片后不显示自动完成建议(md-chips + md-autocomplete)

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

在我的示例( https://jsfiddle.net/vv18yjzo/7/ )中,只要聚焦 md-chips 输入,就应该显示自动完成建议。当我输入一些项目时,这很有效。 但是,当添加然后删除所有可用项目时,自动完成建议为空/隐藏。我必须输入新的搜索文本才能再次查看自动完成建议。

HTML:

<md-input-container class="md-block">

    <label>Categories</label>

    <md-chips ng-model="vm.selectedCategories" 
        md-autocomplete-snap
        md-require-match="true"
        md-on-add="vm.onCategoryAdded($chip, $index)"
        md-on-remove="vm.onCategoryRemoved($chip, $index)">

        <md-autocomplete
            md-selected-item="vm.autocomplete.selectedItem"
            md-search-text="vm.autocomplete.searchText"
            md-selected-item-change="vm.onSelectedItemChanged()"
            md-search-text-change="vm.onSearchTextChanged()"
            md-items="item in vm.searchCategories()"
            md-item-text="item.name"
            md-min-length="0"
            md-select-on-match="true"
            md-match-case-insensitive="true"
            md-no-cache="true"
            placeholder="Choose categories">

            <span md-highlight-text="vm.autocomplete.searchText" 
                md-highlight-flags="i">{{item.name}}</span>

        </md-autocomplete>

        <md-chip-template>
            <span>
                <strong>{{$chip.name}}</strong>
            </span>
        </md-chip-template>

    </md-chips>

</md-input-container>

JS:

(function () {
    'use strict';

    angular
        .module('app', [
            'ngMaterial', 
            'ngMessages'
        ])
        .factory('CategoriesService', CategoriesService)
        .controller('CategoriesCtrl', CategoriesCtrl);

    function CategoriesService($q, $timeout) {

        var that = {
                find: find
            },
            categories = [
                { name: 'a' },
                { name: 'ab' },
                { name: 'abc' },
                { name: 'abcd' },
                { name: 'abcde' },
                { name: 'abcdef' }
            ];

        function find(search, selectedCategories) {
            var deferred = $q.defer(),
                result = categories.filter(function(category) {
                    return (-1 === selectedCategories.indexOf(category) && -1 !== category.name.indexOf(search));
                });

            $timeout(function() {
                deferred.resolve(result);
            }, 100);

            return deferred.promise;
        }

        return that;
    }

    function CategoriesCtrl($scope, CategoriesService) {
        var vm = this;

        vm.selectedCategories = [];
        vm.autocomplete = {
            selectedItem: null,
            searchText: null
        };

        /* ... */

        vm.searchCategories = function() {
            return CategoriesService.find(vm.autocomplete.searchText.toLowerCase(), vm.selectedCategories);
        };

    }

})();

示例:https://jsfiddle.net/vv18yjzo/7/

最佳答案

自动完成搜索文本似乎存在一个奇怪的错误,如果您删除一个项目,它只会取消设置搜索文本变量,从而破坏自动完成事件。

检查这个工作 fiddle https://jsfiddle.net/mgsLkf89/3/

vm.onCategoryRemoved = function($chip, $index) {
  if (!vm.autocomplete.searchText) 
    vm.autocomplete.searchText=null;
};

关于angularjs - 删除所有芯片后不显示自动完成建议(md-chips + md-autocomplete),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37183778/

相关文章:

angularjs - 如何使用 <md-autocomplete> 限制输入字段长度(最大长度)

angular-material - Angular Material mdAutoComplete 中的自由文本输入

angular - 如何在单击图标/按钮时从表中删除单行

angularjs - md-autocomplete md-require-match 在动态设置表达式时不起作用

javascript - 如何在 Ionic 2/Angular 2 项目中实现 Videogular?

javascript - 在指令中使用 templateUrl 时,element.find() 不起作用

angular-material - 一旦文本框变脏并成为焦点,如何显示错误?

angular - 垫步显示所有步骤

javascript - 如何使用 ng-animate 以与列出元素相同的方式为表格行设置动画?

javascript - 在 angularjs 中绑定(bind)数据时显示最后几个字符