解决vue过滤器filters获取不到this对象的问题

解决vue过滤器filters获取不到this对象的问题

目录

vue过滤器filters获取不到this对象

原理

下面举个例子

Vue filters this指向问题

Vue实例中filter不依赖于当前vue实例上下文

vue过滤器filters获取不到this对象 原理

在data中定义一个属性that,把this存储到that中

在调用filters中的方法sum的时候将that传进去即可

下面举个例子

用filters计算data中 a+b 的值

注意:filters中的sum方法的第一个参数是|左边那个a,第二个参数才是括号写的that

<template>   <div>{{a|sum(that)}}</div> </template> <script>   export default {     name: "test",     data() {       return {         that: this,         a: 1,         b: 2       }     },     filters: {       sum(a, that) {         console.log(that);         return a + that.b;       }     },   } </script> Vue filters this指向问题 Vue实例中filter不依赖于当前vue实例上下文

所以在filter中无法直接访问当前vue实例, 所以可以使用computed替代。

可是当遇到需要根据html文本改变,v-for的数据等情况而改变时,computed的功能就无法满足我们的需求了。

那我们就可以使用methods代替

data: {     shopItemType: {} }, methods: {      shopItemType2str(id){         return this.shopItemType[id];     } } <tr v-for="shopItem in shopItems">     <td>{{shopItemType2str(shopItem.item_type)}}</td> </tr>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持易知道(ezd.cc)。

推荐阅读