Vue2(二) 传递对象到子组件中

最近闲的无聊,用vue来重写自己的平台,以前是用jquery写的,去年用react写了一遍,今年打算用vue来翻写一遍。

react中传递对象到子组件是非常普遍,vue还没传过,写个例子试了试,原来也差不多的。

图底部有4个按钮,通过传入一个json对象到子模板中,子模板渲染相应的按钮控件

这里写图片描述

子模板,goBtn的代码如下,接收一个item对象,根据item里的值来组装代码

//系统常规按钮模板
var goBtn={
    props:{
        btnItem:{
            type:Object,
        }
    },
    methods:{
        //点击按钮事件 并触发父节点传入的事件
        btnClick(btnId){
           this.$emit('btnClick',btnId,event);
        },
        //鼠标移入到按钮中 如果存在图片 则需要变更图片地址
        btnMouseOver(event,imgUrl){
            let imgEl=$(event.target).closest(".btnItem").find("img");
            if(imgEl.get(0)!=null){
                let newImg=imgUrl.split(".svg")[0]+"_hover"+".svg";
                imgEl.attr("src",newImg);
            }
        },
        //鼠标移出按钮时 还原图标
        btnMouseLeave(event,imgUrl){
            let imgEl=$(event.target).closest(".btnItem").find("img");
            if(imgEl.get(0)!=null){
                imgEl.attr("src",imgUrl);
            }
        }
    },
    template: (()=> {
        return  `
             <div class="btnItem" @mouseleave="btnMouseLeave($event,btnItem.img)" @mouseover="btnMouseOver($event,btnItem.img)" @click='btnClick(btnItem.id)'>
                <div class="goBtn">
                <!--如果是svg 则展示图标 如果是字体图标 则设置相应的class-->
                    <div class="btnImg" v-if="btnItem.imgType=='svg'">
                      <img  class="svg14" :src="btnItem.img">
                    </div>
                     <div class="btnImg" v-if="btnItem.imgType=='fontIcon'">
                           <i :class="btnItem.img" aria-hidden="true"></i>
                    </div>
                <div class="btnLabel">{{btnItem.text}}</div>
                </div>
            </div>
        `;
    })()
}

调用模板的代码

   <go-btn :btnItem="item"  v-on:btnClick="btnClick" v-for="item of settingBottomBtn"></go-btn>

vuex中定义按钮集合代码

settingBottomBtn:[
            {text:"首页门户设计",id:"portalSettings",img:"fa fa-university",imgType:"fontIcon"},
            {text:"更多设置",id:"moreSetting",img:"fa fa-paper-plane-o",imgType:"fontIcon"},
            {text:"重置",id:"restSetting",img:"../../svg/reset.svg",imgType:"svg"},
            {text:"关闭",id:"closeSettingPanel",img:"../../svg/closeBtn.svg",imgType:"svg"}
        ],
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值