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

照片对象中包含类别列表中的项目。我希望能够通过该列表使用 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:

假设生成的数组少于 15 个项目,我可以在控制器中运行一些动作吗?

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

我不能 $watch 第一个数组,我猜过滤器会创建一个新数组并将这些结果放在页面中。我怎样才能观察结果数组的变化并在控制器中做一些事情?

于 2013-09-12T21:22:22.393 回答