关于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的知识点:

  1. 命名空间

  1. 辅助函数

  1. 子仓库

//只能获取主仓库数据,无法获取子仓库数据// 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:{},}

渲染成功