角度工厂过滤器 - 无法将数据传递给过滤器

时间:2013-09-12 20:44:21

标签: javascript angularjs filter

我正在查看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的类别列表。

照片对象包含来自categs列表的项目。我希望能够通过该列表过滤CLICKED元素,也许还有多个过滤器,但首先要将实际的过滤器值传递给过滤器服务,我似乎无法做到这一点。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

显然我设法以肮脏的方式传递过滤器值(I GUESS),就像这样

<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:

假设结果数组不到15项,我可以在控制器中运行一些动作吗?

实际上反过来,我可以从控制器查询过滤器输出的结果数组吗?

我无法$观看第一个数组,我想过滤器会创建一个新数组并将这些结果放入页面中。 如何查看生成的数组以进行更改并在控制器中执行操作?