组件的props

props是组件的自定义属性,在封装通用组件的时候,合理的使用props可以极大的提高组件的复用性。

例如:

在count.vue文件添加一个点击加一事件

<template>
  <div>
<p>count组件{{count}}</p>
<button @click="count+=1">按钮</button>
  </div>
</template>

<script>
export default {
    data(){
      return {
        count:0
      } 
    }
}
</script>

<style lang="less">

</style>

并绑定到left.vue文件里

<template>
  <div>
    <p>left组件</p>
    <MyCount></MyCount>
  </div>
</template>

<script>
import MyCount from "@/components/count.vue"
export default {
components:{
    MyCount
}
}
</script>

<style>

</style>

在绑定到right页面

<template>
  <div> 
    <p>right组件</p>
    <MyCount ></MyCount>
  </div>
</template>

<script>
import MyCount from "@/components/count.vue"
export default {
components:{
    MyCount
}
}
</script>

<style>
div{
    width: 50%;
    float: left;
}
</style>>

此时效果如下:

点击左右按钮,可以实现加一效果,但是如果我们的要求是两个的初始值为4,6,此时就无法满足要求

 若想达到如上要求,需要借助props(数组形式的props)

<template>
  <div>
    <!-- 此处插值表达式里面改为num 和num+-->
<p>count组件{{num}}</p>
<button @click="num+=1">按钮</button>
  </div>
</template>

<script>
export default {
    // props是自定义属性,允许使用者通过自定义属性,为当前组件指定初始值
    props:["num"],
    data(){
      return {
        count:0
      } 
    }
}
</script>

<style lang="less">

</style>

left、right文件进行如下改变

<template>
  <div>
    <p>left组件</p>
    <!-- 此处要使用v-bind,否则num是字符串,加上v-bind不再是普通的字符串了,而是js里的数字 -->
    <MyCount :num="4"></MyCount>
  </div>
</template>

<script>
import MyCount from "@/components/count.vue"
export default {
components:{
    MyCount
}
}
</script>

<style>

</style>

此时就达到想要的效果了,可以在不同的初始值进行点击加一

 但是点击会发现终端报错了,因为props的值是只读的,不能修改props的值,否则会直接报错。

<template>
  <div>
<p>count组件{{count}}</p>
<button @click="count+=1">按钮</button>
  </div>
</template>

<script>
export default {
    // props是自定义属性,允许使用者通过自定义属性,为当前组件指定初始值
    // props是只读的
    props:["num"],
    data(){
      return {
        // 要想修改props的值可以把props的值转到data里面,因为data的值是可读可改的
        // 把props的num通过this转接给count,就能解决这一问题
        count:this.num
      } 
    }
}
</script>

<style lang="less">

</style>

props的default默认值(对象格式的props)

在声明自定义属性时,可以通过default来定义属性的默认值。数组格式的props没有办法做到一些默认值的精细化设置,此时需要以对象的形式使用。

<template>
  <div>
<p>count组件{{count}}</p>
<button @click="count+=1">按钮</button>
  </div>
</template>

<script>
export default {
   props:{
    num:{
        // 如果外界使用count组件的时候,没有传递num属性,则默认值生效,否则不生效
        default:0
    }
   },
    data(){
      return {
        // 要想修改props的值可以把props的值转到data里面,因为data的值是可读可改的
        // 把props的num通过this转接给count,就能解决这一问题
        count:this.num
      } 
    }
}
</script>

<style lang="less">

</style>

props的type值类型:

在声明自定义属性时,可以通过type来定义属性的值类型。

如果我们在left或者right未绑定v-bind的话,终端不会报错,但是如果加上type属性,定义值类型,终端就会报错。

 props的required必填项:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值