2016-02-15 5 views
1

У меня возникли трудности с использованием настраиваемого фильтра. Я искал и искал, но не могу найти ничего подходящего, но это должно быть быстрым решением для кого-то с небольшим опытом.Параметры фильтра углового JS

Я использую ng-repeat для заполнения списка, это из vm.posts.

Пользователь, который вошел в систему и просматривал сообщения, является vm.user и имеет переменную vm.user.postsWatched, которая представляет собой массив идентификаторов сообщений.

Я создал настраиваемый фильтр, чтобы проверить, имеет ли сообщение «наблюдаемый» и если он его отображает.

В моем фильтре я печать содержимое обеих переменных и находя, что я не совсем то, чего я пытаюсь отправить в

Index.html:.

<ul class="media-list"> 
      {{vm.user.postsWatched}} 
      <li ng-repeat="post in vm.posts | watchedFilter:vm.posts:vm.user.postsWatched | limitTo:3" class="media"> 
      <div class="media-body"> 
       <h4 class="media-heading">{{post.title}}</h4> 
       <p>{{post.date | date: 'short'}} | {{post.content}}</p> 
      </div> 
      </li> 
     </ul> 

На второй линии, отображается правильный массив идентификаторов сообщений, поэтому я знаю, что там нет проблем.

vm.posts и vm.user.postWatched передаются в watchfileFilter как параметры, есть ли проблема до сих пор?

watchedPost.filter.js:

(function() { 
'use strict'; 

angular 
    .module('app') 
    .filter('watchedFilter', function() { 
      return function(inputs,ids) { 
       console.log("ids:" + JSON.stringify(ids[0]) + JSON.stringify(ids[1]) + JSON.stringify(ids[2])); 
       console.log("Input:" + JSON.stringify(inputs[0]) + JSON.stringify(inputs[1]) + JSON.stringify(inputs[2])); 
      ... 

      }; 
     });})(); 

Прежде, чем я даже начать фильтрацию, содержимое параметра функции «ид» не равен vm.user.postsWatched, а содержит ту же информацию, как «входы ». Поэтому я могу сказать, что он получает параметр в порядке, но, похоже, не оба, если кто-то может прояснить, это действительно поможет мне.

Если больше нужно просто спросить, большое спасибо: D

ответ

1

В вашем HTML удалить первый аргумент.

<li ng-repeat="post in vm.posts | watchedFilter:vm.user.postsWatched | limitTo:3" class="media"> 

Когда рамка AngularJS вызывает функцию фильтра, она устанавливает первый аргумент в данные, передаваемые по каналам. Следующие аргументы задаются из аргументов в HTML.

+0

ОК, это блестяще, я попробую прямо сейчас, большое спасибо: D – carrera

+0

Спасибо @georgeawg - это прекрасно, было довольно глупо предположить, что мне нужно было пройти фильтр объектов, которые я уже итерировал, большое спасибо за ваш быстрый ответ – carrera