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


    定义组件

      1. 在程序的 components 目录下新建一个名为 Child.vue 的文件
      2. 在文件内键入如下代码
    1. <template>
    2. <div>
    3. Child
    4. </div>
    5. </template>
    6. <script>
    7. export default {
    8. name: 'Child'
    9. }
    10. </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 参数
    1. <template>
    2. <div>
    3. <h2>子组件,嵌套到一个页面的内部使用</h2>
    4. 接收到父组件传递的参数值:<b>{{msg}}</b><br>
    5. 您的姓名是:{{name}},年龄:{{age}}<br>
    6. </div>
    7. </template>
    8. <script>
    9. export default({
    10. name: 'Child',
    11. //定义属性,其他页面调用该组件时,可以通过属性名称返回值
    12. props:[
    13. "msg",
    14. "name",
    15. "age"
    16. ]
    17. })
    18. </script>

    父组件代码如下

    1. <template>
    2. <div>
    3. <h2>父组件加载子组件</h2>
    4. <hr>
    5. <!--3.调用子组件,并且向子组件传递参数-->
    6. <Child msg="父组件传递给子组件的参数" name="张三" age="20"/>
    7. </div>
    8. </template>
    9. <script>
    10. /*
    11. 1.导入子组件
    12. */
    13. import Child from '../../components/Child'
    14. export default ({
    15. name: 'Parent',
    16. //2.注册子组件
    17. components:{
    18. Child
    19. }
    20. })
    21. </script>

    子组件向父组件传值

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

    子组件修改代码如下:

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

    父组件修改代码如下:

    methods:{

            receFunc(val){

                this.title = val

            }

        }

    Child.vue完整代码

    1. <template>
    2. <div>
    3. <h2>子组件,嵌套到一个页面的内部使用</h2>
    4. 接收到父组件传递的参数值:<b>{{msg}}</b><br>
    5. 您的姓名是:{{name}},年龄:{{age}}<br>
    6. 标题:<input type="text" v-model="title">
    7. <input type="button" @click="test()" value="返回值给父组件">
    8. </div>
    9. </template>
    10. <script>
    11. export default({
    12. name: 'Child',
    13. //定义属性,其他页面调用该组件时,可以通过属性名称返回值
    14. props:[
    15. "msg",
    16. "name",
    17. "age"
    18. ],
    19. data(){
    20. return {
    21. title:''
    22. }
    23. },
    24. methods:{
    25. test(){
    26. //调用父组件的函数,同时传回参数
    27. //parentFunc父组件的函数
    28. // alert(this.title)
    29. this.$emit('parentFunc',this.title);
    30. }
    31. }
    32. })
    33. </script>

    parent.vue完整代码

    1. <template>
    2. <div>
    3. <h2>父组件加载子组件</h2>
    4. <hr>
    5. <!--3.调用子组件,并且向子组件传递参数-->
    6. <Child msg="父组件传递给子组件的参数" name="张三" age="20" @parentFunc="receFunc"/>
    7. 子组件返回的值是:{{title}}
    8. <h3 align="left">子组件传参给父组件的实现步骤</h3>
    9. <hr>
    10. <p align="left">
    11. 1.在parent.vue文件定义接受函数:receFunc<br>
    12. 2.定义调用组件时的事件的名称@parentFunc,该名称自定义<br>
    13. 3.在parent.vue文件调用子组件:&lt;Child msg="父组件传递给子组件的参数" name="张三" age="20" @parentFunc="receFunc"/&gt;<br>
    14. 4.在child.vue文件定义test函数,利用$emit方法调用函数:this.$emit('parentFunc',this.title);返回子组件的值<br>
    15. 5.parentFun名称为自定义,主要parent.vue,child.vue两边使用的名称一致即可
    16. </p>
    17. </div>
    18. </template>
    19. <script>
    20. /*
    21. 1.导入子组件
    22. */
    23. import Child from '../../components/Child'
    24. export default ({
    25. name: 'Parent',
    26. //2.注册子组件
    27. components:{
    28. Child
    29. },
    30. data(){
    31. return{
    32. title:''
    33. }
    34. },
    35. methods:{
    36. receFunc(val){
    37. this.title = val
    38. }
    39. }
    40. })
    41. </script>

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

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

  • 相关阅读:
    Apache Airflow (八) :DAG任务依赖设置
    Linux权限及Xshell运行原理
    2.1HTML5基本结构
    微软电脑管家V2.1公测版正式发布
    解决 iOS 端小程序「saveVideoToPhotosAlbum:fail invalid video」问题
    ConcurrentHashMap (jdk1.7)源码学习
    工作≤4 年,在小公司反复横跳,真的太难了...
    【雷达通信】SAR雷达系统反设计及典型目标建模与仿真实现研究——目标生成与检测(Matlab代码实现)
    16 | Spark SQL 的 UDF(用户自定义函数)
    SpringBoot 2.6. 整合springfox 3.0报错问题解决
  • 原文地址:https://blog.csdn.net/software7503/article/details/133639974