2016-12-29 4 views
0

У меня есть список файловых объектов, как это:Как фильтровать на основе свойства текущего объекта?

{"name":"A1.java", "analyze":false, "index":0}, 
{"name":"A2.java", "analyze":true, "index":1}, 
{"name":"A3.java", "analyze":false, "index":2} 

Я пытаюсь показать имена файлов, которые имеют "analyze":true. Я думаю, что это должно быть что-то вроде этого:

<div class="row"> 
    {{m.files.name | filter: m.files.analyze == true}} 
</div> 

Но это не дает мне сообщение об ошибке, и он не показывает ничего.

Edit: Я знаю, что есть много способов сделать это, но я определенно заинтересован в фильтрации. Если ваш ответ не связан с фильтрацией или почему это не может быть сделано с фильтрацией, пожалуйста, не беспокойтесь, я уже знаю, как это сделать другие способов.

+0

использовать директивы 'ng-show' или' ng-hide' для достижения этого. –

+0

Я пытаюсь изучить встроенные возможности фильтрации углов. Если бы я хотел сделать это, я бы использовал 'ng-repeat'. –

+0

@TravisHeeter Вы хотите отфильтровать, основываясь на некоторых действиях пользователя? то есть выбрать вариант из выпадающего списка, который, в свою очередь, применит фильтр? – frishi

ответ

1

Используйте нг-повтор с фильтром, чтобы показать все строки, которые квалифицируют, как это:

<div ng-repeat="file in m.files | filter: {analyze: true}"> 
    {{ file.name }} 
</div> 

Или, если вы хотите, чтобы просто оценить m.files для такого условия, как anal = true, вы можете создать собственный фильтр, например

app.filter('fileFilter', function() { 

    return function(files) { 
    var result = false; 
    angular.forEach(files, function(file) { 
     if (file.analyze) { 
     result = true; 
     } 
    }); 

    return result; 

    }; 

}); 

и использовать его следующим образом:

<div ng-show="(m.files | filter:fileFilter)"> 
+0

ОК, это самый близкий до сих пор, но как насчет того, когда я хочу показать все выбранные файлы, если они не все выбраны? Другими словами, как я могу использовать этот фильтр в других ситуациях, таких как 'ng-show'? Например, 'ng-show =" m.files | filter {analysis: true}

+0

@TravisHeeter - Хорошо, я лучше понимаю, что вы сейчас спрашиваете. Я обновил свой ответ соответственно. – jbrown

+0

На самом деле фильтр, похоже, не работает: '

{{files.length}}
' показывает '0'. –

0

Вы можете попробовать это

function PersonalFilter(data){ 

    return (data.analyze)? data.name:""; 

} 

    app.filter('myFilter', function() { 
     return PersonalFilter; 
    }); 


<div class="row"> 
    {{m.files | myFilter}} 
</div> 
+0

Спасибо, но нет ли способа сделать это с фильтрацией? –

+0

Прошу прощения, я прочитал ваш комментарий после публикации моего решения. Я изменил решение. Проверьте, подходит ли это решение для вас. –

Смежные вопросы