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属性,就可以动态显示下拉框选项了。