2015-08-20 5 views
0

у меня есть список, который я хочу, чтобы выполнить фильтрацию по значению ID:FilterBy точное совпадение в vue.js

<li v-repeat="release.tracks | filterBy track_format in 'format_id'"> 

Это работает довольно хорошо, если format_id не, например, 12, и в этот момент я вижу все пункты с track_format 1 и 2.

Есть ли простой способ показывать только элементы, где значения представляют собой точное совпадение? Я мог отказаться от использования чисел, но мне кажется, что я буду продолжать сталкиваться с проблемами с форматами, такими как «LP» и «Deluxe LP».

ответ

0

я столкнулся с аналогичной проблемой, и написал нижепреведенный на замену, что делает точное соответствие:

Vue.filter('exactFilterBy', function(array, needle, inKeyword, key) { 
    return array.filter(function(item) { 
     return item[key] == needle; 
    }); 
}); 

Надеюсь, что это поможет!

+0

Спасибо, выглядит действительно полезно! – thesunneversets

0

Ну, вот так я просто придумал, используя пользовательский фильтр, , который работает (я все же хотел бы знать, если такого рода вещи является правильным рода подход, хотя):

Vue.filter('matching_format_id', function(value, format_id) { 
    return value.filter(function(item) { 
     return item.format_id === parseInt(format_id); 
    }); 
}); 

<li v-repeat="release.tracks | matching_format_id track_format"> 

ETA: На самом деле, это не сработало, изменения в релизе треков не вызвали никакого обновления в представлении. Далее галс, пытаясь отфильтровать с вычисленным свойством:

computed: { 
     filteredTracks: function() { 
      return this.release.tracks.filter(function (track) { 
       return track.format_id === parseInt(vm.track_format); 
      }); 
     } 
    }, 

<li v-repeat="filteredTracks"> 

выглядит многообещающим до сих пор, но это то, что я думал о последней идее ...

+0

О, боже мой, возможно, это не сработает: Vue, похоже, не меняет элементы списка, когда версии release.tracks меняются ... Вернуться к чертежной доске! – thesunneversets

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