Vue.js 通过Axios接收的列表中的Vue2搜索
由于过滤比Vue 1复杂得多,我有一个问题 这是我的组件,其中显示了一个羊的列表,带有搜索/筛选姓名或族的选项。 但我不知道如何才能做到这一点Vue.js 通过Axios接收的列表中的Vue2搜索,vue.js,vuejs2,vue-component,Vue.js,Vuejs2,Vue Component,由于过滤比Vue 1复杂得多,我有一个问题 这是我的组件,其中显示了一个羊的列表,带有搜索/筛选姓名或族的选项。 但我不知道如何才能做到这一点 <input type="search" v-model="search" placeholder="Search for Name OR Family" /> <ul> <li v-for="sheep in sheeps"> <!-- Tried also: 'sheep in filteredShe
<input type="search" v-model="search" placeholder="Search for Name OR Family" />
<ul>
<li v-for="sheep in sheeps"> <!-- Tried also: 'sheep in filteredSheeps' -->
{{ sheep.name }} ({{ sheep.type }}/{{ sheep.family }} )
</li>
</ul>
<script>
import axios from 'axios';
export default {
data() {
return {
sheeps: [],
search: '',
};
},
mounted() {
this.getSheeps();
}
methods: {
getSheeps() {
var self = this;
const url = '/api/sheeps';
axios.get(url).then(function(response) {
self.sheeps = response.data;
});
},
},
computed: {
filteredSheeps: function() {
var self = this;
return this.sheeps.filter(function(item) {
return item.family.toLowerCase().indexOf(self.search.toLowerCase()) > -1
})
}
}
}
}
</script>
-
{{sheep.name}}({{sheep.type}}/{{sheep.family})
从“axios”导入axios;
导出默认值{
数据(){
返回{
绵羊:[],
搜索:“”,
};
},
安装的(){
这个。getSheeps();
}
方法:{
getSheeps(){
var self=这个;
const url='/api/sheeps';
get(url).then(函数(响应){
self.sheeps=response.data;
});
},
},
计算:{
filteredSheeps:function(){
var self=这个;
返回此.sheeps.filter(函数(项){
return item.family.toLowerCase().indexOf(self.search.toLowerCase())>-1
})
}
}
}
}
我认为它需要v-for
中的计算方法filteredSheeps
,但也不是这样。然后直接获取错误:
TypeError:null不是一个对象(评估'item.family.toLowerCase')”
这里有一个计算值,它可以防止未填充族和/或名称的情况
filteredSheeps: function() {
let searchTerm = (this.search || "").toLowerCase()
return this.sheeps.filter(function(item) {
let family = (item.family || "").toLowerCase()
let name = (item.name || "").toLowerCase()
return family.indexOf(searchTerm) > -1 || name.indexOf(searchTerm) > -1
})
}
这是一个有效的例子
console.clear()
常数羊=[
{姓名:“莉莉”,字体:“多珀”,家族:“家族1”},
{姓名:“乔”,字体:“美利奴”,家族:“家族2”},
{name:“Bob”,键入:“Dorper”,family:null},
]
新Vue({
el:“应用程序”,
数据:{
绵羊:[],
搜索:空
},
计算:{
filteredSheeps:function(){
让searchTerm=(this.search | |“”).toLowerCase()
返回此.sheeps.filter(函数(项){
let family=(item.family | |“”).toLowerCase()
让name=(item.name | |“”).toLowerCase()
return family.indexOf(searchTerm)>-1 | | name.indexOf(searchTerm)>-1
})
}
},
创建(){
setTimeout(()=>this.sheeps=sheeps,500)
}
})
-
{{sheep.name}}({{sheep.type}}/{{sheep.family})
这是一个计算程序,它可以保护您免受未填充系列和/或名称的情况
filteredSheeps: function() {
let searchTerm = (this.search || "").toLowerCase()
return this.sheeps.filter(function(item) {
let family = (item.family || "").toLowerCase()
let name = (item.name || "").toLowerCase()
return family.indexOf(searchTerm) > -1 || name.indexOf(searchTerm) > -1
})
}
这是一个有效的例子
console.clear()
常数羊=[
{姓名:“莉莉”,字体:“多珀”,家族:“家族1”},
{姓名:“乔”,字体:“美利奴”,家族:“家族2”},
{name:“Bob”,键入:“Dorper”,family:null},
]
新Vue({
el:“应用程序”,
数据:{
绵羊:[],
搜索:空
},
计算:{
filteredSheeps:function(){
让searchTerm=(this.search | |“”).toLowerCase()
返回此.sheeps.filter(函数(项){
let family=(item.family | |“”).toLowerCase()
让name=(item.name | |“”).toLowerCase()
return family.indexOf(searchTerm)>-1 | | name.indexOf(searchTerm)>-1
})
}
},
创建(){
setTimeout(()=>this.sheeps=sheeps,500)
}
})
-
{{sheep.name}}({{sheep.type}}/{{sheep.family})
您放入sheeps
属性的ajax响应返回的对象之一没有family
属性,或者family
属性为空。您放入sheeps
属性的ajax响应返回的对象之一没有family
属性,或者family
属性为空。太好了!但这只搜索family,我也想搜索Name。顺便问一下,为什么超时@bert@user1469734超时只是为了模拟ajax调用,因为我没有返回sheep的端点。我已更新以包含名称。太好了!但这只是对family的搜索,我想搜索还有名字。顺便问一下,为什么要暂停@bert@user1469734超时只是为了模拟ajax调用,因为我没有返回sheep的端点。我已更新以包含名称。