【问题标题】:How to use filterBy in Vue.js如何在 Vue.js 中使用 filterBy
【发布时间】:2016-05-28 16:31:10
【问题描述】:

我正在整理一个简单的图书分类应用程序,但在使用 filterBy 过滤器时遇到了一些问题。该过滤器适用于过滤non-fiction genre,但由于某种原因它不适用于fiction。我想显示书名和作者,然后在输入字段中,过滤按流派显示的书籍列表。因此,如果我在输入字段中写小说,它应该只显示小说书籍。这就是我的观点:

       <div id="app">
            <h1>{{title}}</h1>
              <div id="input">
               <input type="text" v-model="genre" placeholder="Search fiction/non-fiction">
            </div>
             <div id="display-books" v-for=" book in books | filterBy genre in 'genre' ">
               <span>Title: {{book.title}}</span>
               <span>Author: {{book.author}}</span>      
        </div>  
    </div>

这是我的app.js

var appData = { 
  title: 'Book Sorter',
  filters: 'Search filter',
  filtertext: '* only show title if book is available',
  genre: '',
  books:
    [
      {genre: "fiction", title: "The Hobbit", author: "J.R.R Tolkien", available: false},
      {genre: "non-fiction", title: "Homage to Catalonia", author: "George Orwell", available: true},
      {genre: "non-fiction", title: "The Tipping Point", author: "Malcolm Gladwell", available: false},
      {genre: "fiction", title: "Lord of the Flies", author: "William Golding", available: true},
      {genre: "fiction", title: "The Call of the Wild", author: "Jack London", available: true}   
    ]

}
new Vue({
   el: "#app",
   data: appData,

});

【问题讨论】:

    标签: javascript vue.js


    【解决方案1】:

    您的设置没有问题,Vue 的 filterBy 在您的示例中运行良好。当你输入 fiction 时,它会显示所有 Books,因为它们的流派中都有 fiction 这个词,这意味着:fictionnon-fiction 都包含 fiction,返回 true

    像这样创建一个自定义过滤器:

    Vue.filter('match', function (value, input) {
      return input ? value.filter(function(item) {
         return item.genre === input ? value : null;
      }) : value;
    });
    

    并将选择从输入更改为下拉:

    <select v-model="genre">
        <option value="" selected>Select Genre</option> 
        <option value="fiction">Fiction</option>
        <option value="non-fiction">Non-Fiction</option>
    </select>
    

    这是一个实现它的小提琴:https://jsfiddle.net/crabbly/br8huz7c/

    【讨论】:

    • 那我需要使用完全匹配过滤器吗?
    • 没错。您可能可以为此创建一个自定义过滤器。但是,为了显示这样的列表,您可能需要将输入更改为下拉列表。这样,它只会在用户选择所需的流派时触发一个事件。
    • 我添加了一个小提琴作为例子。看看吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 2015-09-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 2023-02-13
    • 2013-09-06
    相关资源
    最近更新 更多