Vue中filters使用data的数据

1,091 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

在项目中使用过滤器想使用data中的数据但是返回的this是undefined : image.png

如何vue 中 filters 如何获取data里的数据

1.声明一个全局变量

let that;

2.在生命周期 beforeCreate里面改变this指向

 beforeCreate: function () {
 that = this;
  }

3.局部filters中使用

借助案例讲解:

image.png

代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=
    , initial-scale=1.0">
    <title>Document</title>
    <script src="../vue.js"></script>
</head>

<body>
    <div id="app">
        <div v-for="(item,index) in list" :key="index">
            <p style="color: rgb(219, 153, 29);">姓名:{{item.name}}</p>
            <p style="color: rgb(228, 25, 143);">性别:{{item.sex | sexFilter}}</p>
        </div>
    </div>

    <script>
        let that = null
        //参数
        var app = new Vue({
            el: "#app", //绑定元素
            //所有数据都放在数据属性中
            data: {
                a: {
                    haha: "1111"
                }
            },
            name: 'UserFilters',
            data() {
                return {
                    sexOption: [{
                        label: '男',
                        value: 0
                    }, {
                        label: '女',
                        value: 1
                    }],
                    list: [{
                        name: '张三',
                        sex: 0
                    }, {
                        name: '李四',
                        sex: 1
                    }]
                }
            },

            beforeCreate: function () {
                that = this;
            },
            filters: {
                //性别过滤显示
                sexFilter(data) {
                    // console.log(that);
                    let resultData = ''
                    that.sexOption.forEach(element => {
                        if (element.value == data) {
                            resultData = element.label
                        }
                    });
                    return resultData
                }
            }
        })
    </script>

</body>

</html>

回到项目中使用:

image.png