0

私の md-autocomplete は、データと md-not-found データを同時に表示しません。

angular.module('BlankApp').controller('ctrl', function($scope, $q){
    $scope.items = [{name: 'item1', id: 1}, {name: 'item2', id: 2}, {name: 'item3', id: 3}];

    $scope.promisedItems = function(){
        var deferred = $q.defer();
        deferred.resolve(items);
        return deferred.promise;
    }
});

<md-autocomplete md-selected-item="selectedItem2" md-search-text="searchText2" md-items="item in promisedItems()" md-item-text="item.name" md-min-length="0" placeholder="items">
    <md-item-template>
        <span md-highlight-text="searchText2" md-highlight-flags="^i">{{item.name}}</span>
    </md-item-template>
    <md-not-found>
        No states matching "{{searchText2}}" were found.
    </md-not-found>
</md-autocomplete>

次のコードペンを確認してください

Attempt1 はデータを表示しますが、'not-found-message' を表示しません。
Attempt2 は「not-found-message」を表示しますが、データは表示しません。

お約束で包みました。
両方を同時に機能させるにはどうすればよいですか?

4

1 に答える 1

0

md-autocomplete は「検索作業」を行っていないことがわかりました。検索ロジックを実装し、見つかったアイテムを返す必要があります。

大量の検索ロジックを作成する必要がないように、検索ロジックを一般的なフィルターにしました。

    $scope.searchCollection = function (searchString, collection, propertyName) {
        var deferred = $q.defer();
        var result = searchString ? collection.filter(createFilterFor(searchString, propertyName)) : collection;
        deferred.resolve(result);
        return deferred.promise;
    }

    function createFilterFor(searchString, propertyName) {
        var lowercaseQuery = angular.lowercase(searchString);
        return function filterFn(item) {
            return (angular.lowercase(item[propertyName]).indexOf(lowercaseQuery) === 0);
        };
    }

使用法md-items="item in searchCollection(searchText, myCollection, 'propertyNameToSearchIn')"

于 2016-09-12T22:42:49.863 に答える