Vue2x项目中在filters中正确使用data中数据的姿势?

问题描述

很多情况下我们会使用 filter 来做 key-label 的转换操作,但是很多场景下我们的 key-label 数据字典是从后端请求回来的。就不能直接使用在 data 中声明好的字典变量。

问题出现的环境背景及自己尝试过哪些方法

一般解决这样的问题,我们都会在 export default 外部定义一个变量并在 created 生命周期中赋值为 this ,使其指向当前 Vue 组件实例。但总是觉得并不优雅,所以如何正确的在 filters 中使用 data 中的数据呢?

相关代码

<template>

<div>{{ roleKey | transfDictValue }}</div>

</template>

<script>

let _this = null

export default {

filters: {

transfDictValue(value) {

const findDict = _this.statusDatas.find(item => item.value === value)

return findDict ? findDict.name : '--'

}

},

data(){

return {

// 以下为异步数据,仅为举例,并不是固定值

roleKey: 1,

dictList: [

{ value: 1, name: '角色A' },

{ value: 2, name: '角色B' }

]

}

},

created() {

_this = this;

},

}

</script>

你期待的结果是什么?实际看到的错误信息又是什么?

如何更加优雅的在 filter 中使用 data 当中声明的数据。


本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。


回答:

transfDictValue里面把dictlist传过去

<template>

<div>{{ roleKey | transfDictValue(dictlist)) }}</div>

</template>

filters: {

transfDictValue(value,dictlist) {

const findDict = dictlist.find(item => item.value === value)

return findDict ? findDict.name : '--'

}

},


回答:

从 vue3 中将其移除可见这种情况下也不一定要使用 filter ,在异步获取到数据之后就可以直接建立一个 {val: key} 的映射关系,并且不需要其具备响应式,则可以将其使用 freeze 冻结起来。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。

以上是 Vue2x项目中在filters中正确使用data中数据的姿势? 的全部内容, 来源链接: utcz.com/p/933847.html

回到顶部