我试图按搜索字词过滤收藏品。当我使用es6语法和内置的功能,如string.includes('')时,它工作正常。不幸的是,我必须支持几个没有ES6的IE版本,因此在某些情况下我必须用普通的javascript编写我的脚本。
使用chrome工作代码但不在IE中:
var vm = new Vue({
el: '#app',
data:{
term: '',
products: [{ ProductCode: '3 Year Fixed'}, { ProductCode: 'Not fixed '},{ ProductCode: '3 Year Fixed'}, { ProductCode: '4 Year Fixed'}, { ProductCode: '5 Year Fixed'}]
},
computed:{
filteredProducts: function(){
if(this.term === ''){
return this.products;
}else{
return this.products.filter(
product => product.ProductCode.includes(this.term));
}
}
}
})
所以我写了这段代码,但它不起作用,但无法发现为什么不会:
computed:{
filteredProducts: function(){
if(this.term === ''){
return this.products;
}else{
return this.products.filter(function(product){
return product.ProductCode.idexOf(this.term) !== -1
})
}
我检查了文档,对我来说它看起来很相似:
computed: {
evenNumbers: function () {
return this.numbers.filter(function (number) {
return number % 2 === 0
})
}
}
答案 0 :(得分:2)
正确的解决方案是在过滤器函数中上下文已经改变了一次
所以我不得不缓存this
。
var self = this;
另一个解决方案是只使用Vue实例属性。
vm.term