关于computed计算属性传参的问题,因为computed是计算属性,如果给conputed传参则会直接报错,并且报computed is not function。
解决办法:
方法一:
通过返回函数来进行传参:
代码:
computed:{...mapState(['tableData']),checkDate:()=>{let nowTime = new Date()let year = nowTime.getFullYear()return (obj)=>(obj.time == year ? true:false)}},
分析:
既然计算属性不能做函数一样进行传参,但是computed有一个return我们可以利用起来,所以我们直接返回一个函数,这样就可以解决computed属性不能传参的问题。
方法二:
还有一种解决computed属性不能传参的办法就是将computed中的方法写道menthods中。
实例:
这是一个后台管理系统中的一个小功能:假如当天的日期和用户的生日相同时,自动将用户的生日进行东台渲染,以达到提示的意义。
用户组件代码:
HTML使用的是elementUI框架
扩展:
在这里使用了插槽的知识点,因为要将年龄进行传参,需要获取当前行的数据,所以使用插槽‘’slot-scope=‘’‘’
HTML代码
{{ scoped.row.name }}<span v-if="scoped.row.age青年<span v-else-if="scoped.row.age中年老年{{ scoped.row.bir }}
JS代码:
其中在代码中,使用了辅助函数来获取子仓库的值
这里有关于Vuex的知识点:
命名空间
辅助函数
子仓库
//只能获取主仓库数据,无法获取子仓库数据// import {mapState} from 'vuex'import {createNamespacedHelpers} from 'vuex' //可以帮助从指定命名空间寻找数据const {mapState,mapMutations} = createNamespacedHelpers('userModules')export default {data(){return {userName:'',nowTime:new Date(),}},methods:{...mapMutations(['changeTableData']),changeEdit(obj){obj.edit = truethis.userName = obj.name},changeName(obj){obj.edit = falseobj.name = this.userName this.changeTableData(obj)}},computed:{...mapState(['tableData']),checkDate:()=>{let nowTime = new Date()let year = nowTime.getFullYear()return (obj)=>(obj.time == year ? true:false)}},};.mycolor{color:tomato}
子仓库中用户的代码:
export default {//开启命名空间,默认会将文件名作为仓库名字namespaced:true,state:{tableData:[{id: 1,name: '王小虎',age: '17',dept:'土木工程',bir:'理工科',time:2024,edit:false}]},mutations:{changeTableData(state,obj){console.log(obj);const result = state.tableData.find(item=>item.id == obj.id)result.name = obj.name}},actions:{},}
渲染成功