0

私は Angular のドキュメントを調べていますが、これ以上ドキュメント化されたものはありません。

私の問題は次のとおりです。

私はフィルターを持っています:

.filter('filteringService', function () {
        return function (photos, categsList) {
            if (photos !== undefined) {
                var filteredPosts = [];
                console.log('Categories or Selected Categories:');
                console.log(categsList);
                //DEVEL Only, assign a SEARCH value, can't pass the data from the list now.
                categsList = 'people';
                if (categsList === undefined) {
                    for(i=0; i < photos.length; i++) {
                        filteredPosts.push(photos[i]);
                    }
                } else {
                    console.log('Trying to push a category slug to search for.');
                    //TASK: Convert in multiple possible selections.
                    filteredPosts = [];
                }

                console.log('Filter returns ' + filteredPosts.length + ' posts');
                return filteredPosts;
            }
        };
    });

そして、私はテンプレートを持っています

<div class="photos">
    <div class="filters">
        <ul>
            <li><a>ALL</a></li>
            <li ng-repeat="category in categsList">
                <a ng-checked="category[0]" ng-model="category[0]">{{ category[1] }}</a>
            </li>
        </ul>
    </div>
    <ul class="photos-list">
        <li ng-repeat="photo in photos|filteringService:category">
            <h1>{{ photo.title }} click <a href="#/photos/{{ photo.slug }}"> LINK</a></h1>
            <ul class="categories">
                <li ng-repeat="category in photo.categories">
                    {{ category.title }}
                </li>
            </ul>
        </li>
    </ul>
</div>

という名前の投稿を含む巨大なオブジェクトがありphotos、次に という名前のカテゴリ リストがありますcategsList

photos オブジェクトには、categs リストのアイテムが含まれています。そのリスト、およびおそらく複数のフィルターを介してCLICKED要素でフィルター処理できるようにしたいのですが、最初に実際のフィルター値をフィルターサービスに渡すと、それができないようです。

どうすればいいですか?

4

1 に答える 1

0

どうやら、このように汚い方法で(私は推測します)、フィルター値を渡すことができたようです

<a ng-bind="category.slug" ng-click="returnFilter(category.slug);" ng-model="category.slug">{{ category.title }}</a>

ここに行きます

 $scope.returnFilter = function(theSlug) {
            $scope.filterBy = theSlug;
        };

そしてここに出てくる

<li ng-repeat="photo in photos|filteringService:filterBy">

動作していますが、これは正しいですか?


編集: また、この方法を念頭に置いて、配列を theSlug として渡すことができるので、複数のフィルタリングを行うことができます。同じ項目を 2 回クリックすると、配列から取得されます。うーん


編集2:

結果の配列が 15 項目未満であるとしましょう。これを知っているコントローラーで何らかのアクションを実行できますか?

実際には逆に、フィルターが出力する結果の配列をコントローラーから照会できますか?

最初の配列を $watch できません。フィルターが新しい配列を作成し、それらの結果をページに配置すると思います。結果の配列の変更を監視し、コントローラーで何かを行うにはどうすればよいですか?

于 2013-09-12T21:22:22.393 に答える