我刚刚开始使用Vue.js,这就是我正在做的事情:我正在渲染产品列表,每个产品都有name
,gender
和{{1 }}。我希望用户能够按性别过滤产品,方法是使用输入来输入性别。
size
我设法更新了性别,但我对过滤部分有疑问。页面加载时,我不希望任何过滤。在文档中,他们建议使用var vm = new Vue({
el: '#product_index',
data: {
gender: "",
products: [{name: "jean1", gender: "women", size: "S"}, {name: "jean2", gender: "men", size: "S"}]
},
methods:{
updateGender: function(event){
this.gender = $(event.target).val()
}
}
}
)
<div v-for="product in products" v-if="...">
<p>{{product.name}}<p>
</div>
<input v-on:change="updateGender">
,但它似乎与此配置不兼容。
如果我使用v-if
,我可以这样做:
v-if
但同样,当页面加载时,这不起作用,因为性别为空。 我无法找到解决方法。
我该如何处理这个问题?
答案 0 :(得分:58)
使用计算属性 - 类似这样的示例(按类型过滤示例项目)
const app = new Vue({
el: '#app',
data: {
search: '',
items: [
{name: 'Stackoverflow', type: 'development'},
{name: 'Game of Thrones', type: 'serie'},
{name: 'Jon Snow', type: 'actor'}
]
},
computed: {
filteredItems() {
return this.items.filter(item => {
return item.type.toLowerCase().indexOf(this.search.toLowerCase()) > -1
})
}
}
})
模板:
<div id="app">
<div v-for="item in filteredItems" >
<p>{{item.name}}<p>
</div>
<input type="text" v-model="search">
</div>
答案 1 :(得分:4)
您可以尝试v-if="!gender || product.gender == gender"
答案 2 :(得分:1)
只需修改 @Nora 的答案即可。
您需要将模板更改为:
<div id="product_index">
<div v-for="product in products" v-if="!gender || product.gender===gender">
<p>{{product.name}}<p>
</div>
<input v-on:change="updateGender">
</div>
,并在JS文件中为:
var vm = new Vue({
el: '#product_index',
data: {
gender: "",
products: [{name: "jean1", gender: "women", size: "S"}, {name: "jean2", gender: "men", size: "S"}]
},
methods:{
updateGender: function(event){
this.gender = event.target.value
}
}
}
);
正在运行的演示:https://jsbin.com/qocuraquki/edit?html,js,console,output
答案 3 :(得分:0)
computed: {
filteredItems() {
return this.allStartupData.filter(item => {
let byName =
item.name.toLowerCase().indexOf(this.search.toLowerCase()) > -1;
let byDescription =
item.description.toLowerCase().indexOf(this.search.toLowerCase()) >
-1;
if (byName === true) {
return byName;
} else if (byDescription === true) {
return byDescription;
}
});
}
}
然后您可以遍历filterItems之类的
<v-flex v-for="(obj,index) in filteredItems" :key="index" xs12 md4>