AI英雄 | 论人工智能与自由意志,请看尤瓦尔与李飞飞的这场“激辩”

  下面是一个简单的示例,使用了v-for指令来动态显示下拉框选项:

  HTML模板:

  ```

  <div id="app">

  <label for="type">图书类型:</label>

  <select id="type" v-model="filter.type">

  <option value="">全部</option>

  <option v-for="type in types" :value="type">{{ type }}</option>

  </select>

  <br>

  <label for="title">书名:</label>

  <input id="title" type="text" v-model="filter.title">

  <br>

  <ul>

  <li v-for="book in filteredBooks">{{ book.title }} - {{ book.author }}</li>

  </ul>

  </div>

  ```

  Vue实例:

  ```

  new Vue({

  el: '#app',

  data: {

  books: [

  { type: '小说', title: '鬼吹灯', author: '天下霸唱' },

  { type: '小说', title: '三体', author: '刘慈欣' },

  { type: '科普', title: '人类简史', author: '尤瓦尔·赫拉利' },

  { type: '科普', title: '未来简史', author: '尤瓦尔·赫拉利' },

  { type: '编程', title: 'JavaScript高级程序设计', author: 'Nicholas C. Zakas' },

  { type: '编程', title: 'Vue.js实战', author: '梁灏' }

  ],

  types: [], // 图书类型列表

  filter: { type: '', title: '' } // 过滤条件

  },

  computed: {

  filteredBooks: function() {

  var self = this;

  return this.books.filter(function(book) {

  return (!self.filter.type || book.type === self.filter.type) &&

  (!self.filter.title || book.title.indexOf(self.filter.title) !== -1);

  });

  }

  },

  mounted: function() {

  // 初始化图书类型列表

  var types = [];

  this.books.forEach(function(book) {

  if (types.indexOf(book.type) === -1) types.push(book.type);

  });

  this.types = types;

  }

  });

  ```

  在上面的示例中,我们使用v-for指令来动态显示下拉框选项。在select元素中,我们使用v-model指令将下拉框的值绑定到Vue实例的filter对象上。在option元素中,我们使用v-for指令遍历types数组,并使用:value指令将当前类型值绑定到option的value属性上。这样就可以动态生成下拉框选项了。

  在Vue实例中,我们定义了一个computed属性filteredBooks来过滤图书列表。在过滤条件中,我们使用了Vue实例的filter对象来获取用户输入的图书类型和书名。如果用户没有输入任何过滤条件,则默认显示全部图书。

  在mounted钩子函数中,我们初始化了图书类型列表。遍历books数组,如果当前图书类型不在types数组中,则将其添加到types数组中。最后将types数组赋值给Vue实例的types属性,就可以动态显示下拉框选项了。