旧浏览器中的Vue.js条件渲染

时间:2017-01-26 15:22:30

标签: javascript syntax vue.js

我试图按搜索字词过滤收藏品。当我使用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
    })
  }
}

1 个答案:

答案 0 :(得分:2)

正确的解决方案是在过滤器函数中上下文已经改变了一次 所以我不得不缓存this

var self = this;

另一个解决方案是只使用Vue实例属性。 vm.term