第10讲:Vue组件的定义与注册

定义组件

  1. 在程序的 components 目录下新建一个名为 Child.vue 的文件
  2. 在文件内键入如下代码
<template>
  <div>
    Child
  </div>
</template>
<script>
export default {
  name: 'Child'
}
</script>
  新建的 Child .vue 文件即为我们定义的组件文件的位置一般放在 src 目录下的 components 目录下

在App.vue文件内注Child.vue组件

  1. 首先将组件引入到 App.vue 文件内
import Child from './components/Child'
  注意:组件引入时不需要使用后缀名.vue
  2. App.vue 模块内添加一个名为 components 的属性
  3. 将组件注册到 App.vue 文件内
components: {
        Child
}
  4. template 标签内使用 Child 组件
< Child />

Vue组件之间的传值

父子组件通信

如何定义父子组件?
将其他组件以import引入用自定义标签接收,在当前组件中component里注册该标签,页面上可以直接用<自定义标签></自定义标签>样子使用。当前组件为父组件,被引入的组件为子组件。

父组件向子组件传值

一般在子组件内定义props来做接收 即:
  props: [
       'msg'
  ]
  Child .vue 文件代码变更如下:
  定义好 props 之后我们可以在父组件传递 props 参数
<template>
    <div>
        <h2>子组件,嵌套到一个页面的内部使用</h2>
        接收到父组件传递的参数值:<b>{{msg}}</b><br>
        您的姓名是:{{name}},年龄:{{age}}<br>
    </div>
</template>
<script>
    export default({
        name: 'Child',
        //定义属性,其他页面调用该组件时,可以通过属性名称返回值

        props:[
            "msg",
            "name",
            "age"
        ]
    })
</script>

父组件代码如下

<template>
    <div>
        <h2>父组件加载子组件</h2>
        <hr>
        <!--3.调用子组件,并且向子组件传递参数-->
        <Child msg="父组件传递给子组件的参数" name="张三" age="20"/>
    </div>
</template>
<script>
/*
    1.导入子组件
*/
import Child from '../../components/Child'
export default ({
    name: 'Parent',
    //2.注册子组件
    components:{
        Child
    }
})
</script>

子组件向父组件传值

  子组件通过调用 this.$emit() 方法向父组件传值
  基本语法:
  this.$emit('func', param)
  func: 为父组件中绑定的函数名,可自定义
  param: 为要传递的参数
  <Child @func=”funcHandle”>
  其中 funcHandle 需在父组件中定义好相应的方法,该方法接收一个或多个参数
  funcHandle(val) {
      this.msg = val
  }

子组件修改代码如下:

this.$emit('parentFunc',this.title);

父组件修改代码如下:

<Child msg="父组件传递给子组件的参数" name="张三" age="20" @parentFunc="receFunc"/>

methods:{

        receFunc(val){

            this.title = val

        }

    }

Child.vue完整代码

<template>
    <div>
        <h2>子组件,嵌套到一个页面的内部使用</h2>
        接收到父组件传递的参数值:<b>{{msg}}</b><br>
        您的姓名是:{{name}},年龄:{{age}}<br>
        标题:<input type="text" v-model="title">
        <input type="button" @click="test()" value="返回值给父组件">
    </div>
</template>
<script>
    export default({
        name: 'Child',
        //定义属性,其他页面调用该组件时,可以通过属性名称返回值

        props:[
            "msg",
            "name",
            "age"
        ],
        data(){
            return {
                title:''
            }
        },
        methods:{
            test(){
                //调用父组件的函数,同时传回参数
                //parentFunc父组件的函数
                // alert(this.title)
                this.$emit('parentFunc',this.title);
            }
        }
    })
</script>

parent.vue完整代码

<template>
    <div>
        <h2>父组件加载子组件</h2>
        <hr>
        <!--3.调用子组件,并且向子组件传递参数-->
        <Child msg="父组件传递给子组件的参数" name="张三" age="20" @parentFunc="receFunc"/>

        子组件返回的值是:{{title}}

        <h3 align="left">子组件传参给父组件的实现步骤</h3>
        <hr>
        <p align="left">
            1.在parent.vue文件定义接受函数:receFunc<br>
            2.定义调用组件时的事件的名称@parentFunc,该名称自定义<br>
            3.在parent.vue文件调用子组件:&lt;Child msg="父组件传递给子组件的参数" name="张三" age="20" @parentFunc="receFunc"/&gt;<br>
            4.在child.vue文件定义test函数,利用$emit方法调用函数:this.$emit('parentFunc',this.title);返回子组件的值<br>
            5.parentFun名称为自定义,主要parent.vue,child.vue两边使用的名称一致即可
        </p>

    </div>
</template>
<script>
/*
    1.导入子组件
*/
import Child from '../../components/Child'
export default ({
    name: 'Parent',
    //2.注册子组件
    components:{
        Child
    },
    data(){
        return{
            title:''
        }
    },
    methods:{
        receFunc(val){
            this.title = val
        }
    }

})
</script>

本人从事软件项目开发20多年,2005年开始从事Java工程师系列课程的教学工作,录制50多门精品视频课程,包含java基础,jspweb开发,SSH,SSM,SpringBoot,SpringCloud,人工智能,在线支付等众多商业项目,每门课程都包含有项目实战,上课PPT,及完整的源代码下载,有兴趣的朋友可以看看我的在线课堂

讲师课堂链接:https://edu.csdn.net/lecturer/893

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

CSDN专家-赖老师(软件之家)

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值