需求:一个有很多(面板,结构都不同,总之就是不方便用v-for)信息的页面,其中没有的数据显示灰色的‘暂无数据’(不知道哪些数据是没有的)
我起初是在接到后端返回数据后这样做的:
// export default
data() {
return {
headerInfo: {
name: undefined,
// ……
},
NO_DATA: '暂无信息',
};
},
// ……
methods: {
// ……
turnHeaderInfo(data) {
Object.keys(this.headerInfo).forEach((e) => {
this.headerInfo[e] = data[e] || this.NO_DATA;
})
},
},
然后我在子组件中这样用
{{ xmlData.name }}
export default {
props: ['xmlData'],
data () {
return {
};
},
}
假设name没有数据,那么这样就不方便给该元素加.no-data使其变成灰色。
这里有什么方法可以批量的,或者有一个公共的方法判断,如果字段为空就自动改渲染该字段的加class
后来我又在全局注册了一个turnNoData的filter,将父组件的method改了下
// main.js
Vue.filter('turnNoData', function (val) {
if (!val) {
return '暂无数据';
}
return val;
})
// App.vue
methods: {
// ……
turnHeaderInfo(data) {
Object.keys(this.headerInfo).forEach((e) => {
this.headerInfo[e] = data[e];
})
},
},
// childComponent
{{ xmlData.name | turnNoData }}
但是该页面数据有点多,而且我不知道哪些字段有数据哪些没有,这样的话,就需给每个需要渲染的字段加class判断和过滤,感觉敲级麻烦啊,是我的思路有问题吗?应该怎样解决?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
ringa_lee