第二十二篇 Vue中父传子 - props

         上一篇内容讲了这个Vue组件的引入使用,知道组件有这个复用性,那么现在要进一步来了解组件中的一些个运用,如在页面中导航显示对应的名称,这个时候就需要进行一个组件的传值,来一个简单的图解:

<div id="app">
    <navbar></navbar>
</div>
<script>
    Vue.component("navbar",{
        template:`
        <div>
            <button>返回</button>
            <span> 导航 <span>  
            <button>首页</button>  
        </div>    
        `
    })

    new Vue({el:'#app'})
</script>

props 

        把组件变成复用组件后期望的效果才是用这个组件的目的,能够达成想要的效果,那么这里需要在父组件将对应的mytitle传过去;下面来简单的完成这个父传子:

<div id="app">
    <navbar mytitle="第一章"></navbar>
</div>
<script>
    Vue.component("navbar",{
        props:['mytitle'],
        template:`
        <div>
            <button>返回</button>
            <span> {{mytitle}} <span>  
            <button>首页</button>  
        </div>    
        `
    })
    
    new Vue({el:'#app'})
</script>

         通过以上的代码可以看到mytitle是在父组件中去定义的,通过props来接收父组件传过来的mytitle数据,同时mytitle中的数据可以与data绑定(v-bind),当data中的数据发送改变时,组件中的mytitle值也会随之改变。

<div id="app">
    <!-- <navbar v-bind:mytitle="title"></navbar> 简写,前面v-bind讲过-->
    <navbar :mytitle="title"></navbar> 
</div>
<script>
    Vue.component("navbar",{
        props:['mytitle'],  // 父组件传来的属性,在这里进行接收
        template:`
        <div>
            <button>返回</button>
            <span> {{mytitle}} <span>  
            <button>首页</button>  
        </div>    
        `
    })
    
    new Vue({
        el:'#app',
        data:{
            title:'第一章'
        }
    })
</script>

场景

         这里先按照前面的方法实现该效果;并添加对应的样式;

<div id="app">
    <navbar mytitle="首页"></navbar> 
    <navbar mytitle="服务"></navbar> 
    <navbar mytitle="我的"></navbar> 
</div>
<script>
    Vue.component("navbar",{
        props:['mytitle'],
        template:`
        <div style="width: 150px;height: 30px;background-color: #41B784;margin-top:10px;text-align:center">
            <button style="border: none; background-color:#41B784;color: white;">返回</button> 
            <span style="color:#33495D;"> {{mytitle}} </span>  
            <button style="border: none; background-color:#41B784;color: white;">首页</button>  
        </div>    
        `
    })
    
    new Vue({el:'#app'})
</script>

现在将起改为以下这样:

思路:两侧的按钮显示或者隐藏可以用v-show控制,什么时候显示隐藏则就是要知道当前的导航是不是首页,是首页的话就不去显示,那么通过传值的方式,确定v-show是true还是false,那么按照这个思路进行编写;

        1)传值:isShow;v-bind:myShow(:myShow)

        2)<button v-show="myShow">

<div id="app">
    <navbar mytitle="首页" myshow="false"></navbar> 
    <navbar mytitle="服务" myshow="true"></navbar> 
    <navbar mytitle="我的" myshow="true"></navbar> 
</div>
<script>
    Vue.component("navbar",{
        props:['mytitle','isShow'],
        template:`
        <div style="width: 150px;height: 30px;background-color: #41B784;margin-top:10px;text-align:center">
            <button v-show="myshow" style="border: none; background-color:#41B784;color: white;">返回</button> 
            <span style="color:#33495D;"> {{mytitle}} </span>  
            <button v-show="myshow" style="border: none; background-color:#41B784;color: white;">首页</button>  
        </div>    
        `
    })
    
    new Vue({el:'#app'})
</script>

效果:以下就是能够达成期望的一个效果;

        那么如果我们要将这个组件进行封装,封装其他给其他人去使用(或者几个人一同完成一个小项目),那么这里就需要写的严谨一些,这里就希望用户传过来的值是正确的,即使传错了能够反馈回去需要的是什么类型等等;那么就可以用props做属性验证:

<script>
    Vue.component("navbar",{
        // props:['mytitle','myshow'],
        props:{
            mytitle:String,
            myshow:Boolean
        },
...

         我们知道传过去的值是 myshow = "false/true",修改下面这样就能看到效果;

<div id="app">
    <navbar mytitle="首页" :myshow="false"></navbar> 
    <navbar mytitle="服务" :myshow="true"></navbar> 
    <navbar mytitle="我的" :myshow="true"></navbar> 
</div>

           那么看上面这一段代码可以知道需不需要显示都需要将这个myshow值传过去,希望能够有一个常态化,默认是显示还是不显示,那么我们就可以来编写props:

<div id="app">
    <navbar mytitle="首页" :myshow="false"></navbar> 
    <navbar mytitle="服务" ></navbar> 
    <navbar mytitle="我的" ></navbar>
</div>
<script>
    Vue.component("navbar",{
        // props:['mytitle','myshow'],
        props:{
            mytitle:{
                type:String,
                default:'默认'
            },
            myshow:{
                type:Boolean,
                default:true    // 默认显示
            }
        },
...

        测试什么都不传之后默认的组件是什么样的?<navbar></navbar>

        以上就是组件中的一个父组件向子组件传值(父传子),即是属性绑定,通过传递属性,将父组件的状态传递给子组件去使用,通过props接收父组件传来的属性;感谢大家支持!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灵魂学者

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值