Vue 父子组件传值与验证props

在 Vue 中,父子组件的关系可以总结为 props向下传递,事件向上传递。父组件通过 props 给子组件下发数据,子组件通过事件给父组件发送消息。看看它们是怎么工作的。

注意:这种方式只能由父向子传递,子组件不能更新父组件内的data

实例:

1.在父组件中定义 msg 属性

data:{
      msg:'123 -我是父组件中的数据'
    },

2.引用子组件

父组件可以在引用子组件的时候,通过属性绑定的形式,把需要传递给子组件的数据,以属性绑定的形式,传递到子组件内部,供子组件使用。

把父组件传递过来的 msg 属性,绑定到子组件的 parentmsg 属性上。

<com1 :parentmsg="msg"></com1>
 
 

3. 在子组件定义部分,需要把父组件传递过来的 parentmsg 属性,先在props数组中定义一下(代表这个属性是由父组件传递过来的),这样,才能使用这个数据

props:['parentmsg'],
 
 

4.在子组件中使用

template:"<h1>这是子组件--{{parentmsg}}</h1>",
 
 

5.子组件中data和props的区别

子组件中的data数据,不是通过父组件传递的是子组件私有的,是可读可写的。

子组件中的所有 props中的数据,都是通过父组件传递给子组件的,是只读的。

App.vue

<template>
  <div id="app">
    <h1>{{ msg }}</h1>

    <!-- 3.在模板中使用 -->
    <v-home></v-home>
    <br>

  </div>
</template>

<script>
/*
生命周期函数/钩子:
组件挂载、组件更新、组件销毁触发的一系列方法 这些 方法叫做生命周期函数

*/
//1.引入组件
import Home from './components/Home.vue';

export default {
  name: 'app',
  data () {
    return {
      msg: '我是一个根组件'
    }
  },
  //2.挂载组件
  components:{//前面的组件名称不能和html一样
    'v-home':Home,
  },
  mounted(){
    console.log("我是一个生命周期函数");
  }
}
</script>

<style lang="scss">

</style>

在父组件中,引入子组件,并传入子组件内需要的值
Home.vue

<template>
   <div id="home">
      <h3>首页组件</h3>
      <!-- 完整语法 v-bind的缩写 <a v-bind:href="url"></a> -->
      <!-- 分别传属性 方法 实例-->
      <v-header :title="title" :homemsg="msg" :run="run" :home="this"></v-header>
   </div>
</template>

<script>
/*
    1.父组件调用子组件的时候 绑定动态属性
        <v-header :title="title"></v-header>

    2、在子组件里面通过 props接收父组件传过来的数据
*/

import Header from './Header.vue';

export default {
   data() {
       return {
         msg:'我是一个home组件',
         title:'首页传过来的'
       }
   },
  components: {
    'v-header':Header
  },
  methods:{
    run(data){
      alert('我是home组件的run方法'+data);
    }
  }
}
</script>

<style scoped lang="scss">
</style>

定义一个子组件,在组件中注册props
Header.vue

<template>
   <div class="">

      <h1>子组件Header:</h1>
      <h2>我是头部组件---{{title}}---{{homemsg}}</h2>

      <button @click="run('和子组件的123')">执行父组件的方法</button>

      <br>
      <button @click="getParent()">获取父组件的数据和方法</button>

      <br>

   </div>
</template>

<script>
export default {
   name: '',
   data() {
       return {
         msg:'子组件msg'
       }
   },
   methods:{
      getParent(){
        //alert(this.title);
        //this.home是下面指首页的home
        //alert(this.home.title);
        //执行父组件的run()方法
        this.home.run();
      }
   },
   props:['title','homemsg','run','home']
}
</script>

<style scoped lang="scss">
</style>

运行截图:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue是一个以数据驱动、组件化的前端框架,其中,组件化是Vue中较为重要的概念之一,组件之间的通信则成为Vue中较为普遍的需求。 Vue中有两种组件的关系,一种是父子之间的关系,一种是兄弟之间的关系,父子组件之间的通信则可以通过props和value实现。 在Vue的父组件中,可以通过prop绑定属性的方式将数据递给子组件,子组件通过props接收父组件的数据并进行操作。 例如,父组件中定义props属性: ``` <template> <child-component :name="name"></child-component> </template> <script> export default { name: 'parent-component', data() { return { name: 'Tom' } }, components: { 'child-component': childComponent } } </script> ``` 子组件则需要在props中声明接收父组件name数据: ``` <template> <div>{{name}}</div> </template> <script> export default { name: 'child-component', props: { name: { type: String, required: true } } } </script> ``` 在父组件中,通过:name属性将name数据递给child-component组件,在子组件props中,声明name属性,类型为String,并设置required为true,则父组件必须递name数据给子组件,否则会抛出错误。 当父组件的数据发生变化时,子组件也会及时更新,这时就可以通过子组件中的计算属性或方法对prop数据进行处理或者对递的数据进行一些额外的操作。 以上就是Vue父子组件传值props value的简单介绍,掌握好这个知识点可以更好地理解Vue组件的通信方式,提高开发效率和代码的可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值