• 技术文章 >web前端 >js教程

    Vue中父子组件间的通信

    不言不言2018-07-13 17:22:55原创846
    这篇文章主要介绍了关于Vue中父子组件间的通信,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

    Vue.js是一套构建用户界面的渐进式框架。与其他重量级框架不同的是,Vue 从根本上采用最小成本、渐进增量的设计。Vue 的核心库只专注于视图层,并且很容易与其他第三方库或现有项目集成。另一方面,当与单文件组件和 Vue 生态系统支持的库结合使用时,Vue 也完全能够为复杂的单页应用程序提供有力驱动。

    一、运行环境搭建

    Vue引入方式一般有三种:

    第一种CDN引入

    <script src="[https://cdn.jsdelivr.net/npm/vue](https://cdn.jsdelivr.net/npm/vue)"></script>

    第二种使用 NPM 安装

    $ npm install vue//安装最新稳定版

    第三种搭建脚手架CLI
    所谓脚手架是通过webpack搭建的开发环境,用于快速搭建大型单页面应用程序。能够为现代前端开发的工作流程,带来持久强力的基础架构。只需几分钟,就可以建立并运行一个带有“热重载、保存时代码检查以及可直接用于生产环境的构建配置”的项目。
    首先必须先安装node.js,Node.js 在 0.6.3 版本开始内建npm,所以安装好node.js后,npm也就装好。然后在通过git bash 操作以下命令行:

    $ node -v//检查是否已经装好了node
    $ npm -v//检查是否已经装好了npm
    $ npm install --global vue-cli //安装 vue-cli
    $ vue init webpack project//进入目标文件夹创建一个新项目
    $ cd project//进入新项目
    $ npm install//安装package.json中依赖的node_modules
    $ npm run dev//运行该项目

    对于大陆用户,建议将npm的注册表源设置为国内的镜像,可以大幅提升安装速度。推荐使用这种安装脚手架。

    npm config set registry https://registry.npm.taobao.org//配置淘宝镜像
    npm config get registry//验证是否成功
    npm install -g cnpm --registry=https://registry.npm.taobao.org//安装cnpm
    cnpm install -g vue-cli//cnpm安装脚手架
    vue init webpack my-project
    cd my-project
    cnpm install
    cnpm run dev

    最后打开http://localhost:8080,就出现下面的页面,标志着脚手架搭建完成了。
    3631596858-5b462d796e21f_articlex[1].png

    大前端零基础入门到就业:进入学习

    二、介绍SRC文件流程及根组件App

    脚手架搭建完成后,project里面各个文件夹及文件,如下图:
    3476872098-5b462d79e3247_articlex[1].png

    1.src文件流程介绍

    index.html(入口文件)=>main.js=>App.vue(根组件),根组件中模板内容就直接插入到入口文件中#app处,然后再将页面呈现出来。

    2.根组件App介绍

    主要由三部分组成,分别为模板(html结构),行为(处理逻辑)和样式(解决样式)

    三、vue组件嵌套

    vue组件嵌套是指写好的子组件如何与根组件取得关联,通常可以分为组件全局定义和组件局部定义,后者比较常见。

    1.组件全局定义

    一般以下两个步骤:

    ①main.js引入子组件

    ②App.vue组件中template调用

    //main.js
    import Vue from 'vue'
    import App from './App'
    import Users from "./components/Users";//引入子组件Users
    Vue.config.productionTip = false
    Vue.component("users",Users);//自定义名字便于App.vue组件调用,后者为组件名
    new Vue({
      el: '#app',
      components: { App },
      template: '<App/>'
    })
    //App.vue组件
    <template>
      <p id="app">
       <users></users>//在这里调用,自定义名字是小写的
      </p>
    </template>

    2.组件局部定义

    一般以下三个步骤:

    ①import引入子组件

    ②export default注册子组件

    ③template模板中加入子组件

    2894385749-5b462d79b924d_articlex[1].png

    四、父组件向子组件传值

    接下来我们通过一个例子,说明父组件如何向子组件传递值:在子组件Users.vue中如何获取父组件App.vue中的数据 users:["Henry","Bucky","Emily"]

    1.创建子组件,在src/components/文件夹下新建一个Users.vue子组件

    2.在App.vue中注册Users.vue组件,并在template中加入users标签

    //App.vue父组件
    <template>
      <p id="app">
        <users v-bind:users="users"></users>//前者自定义名称便于子组件调用,后者要传递数据名
      </p>
    </template>
    <script>
    import Users from "./components/Users"
    export default {
      name: 'App',
      data(){
        return{
          users:["Henry","Bucky","Emily"]
        }
      },
      components:{
        "users":Users
      }
    }

    3.Users.vue的中创建props,然后创建一个users的属性

    //users子组件
    <template>
      <p class="hello">
        <ul>
          <li v-for="user in users">{{user}}</li>//遍历传递过来的值,然后呈现到页面
        </ul>
      </p>
    </template>
    <script>
    export default {
      name: 'HelloWorld',
      props:{
        users:{           //这个就是父组件中子标签自定义名字
          type:Array,
          required:true
        }
      }
    }
    </script>

    五、子组件向父组件传值(通过事件形式)

    接下来我们通过一个例子,说明子组件如何向父组件传递值:
    当我们点击“Vue.js Demo”后,子组件向父组件传递值,文字由原来的“传递的是一个值”变成“子向父组件传值”,实现子组件向父组件值的传递。

    1631286133-5b462d79b5ac0_articlex[1].png

    1.在子组件(header组件)中文字部分绑定一个点击事件

    <template>
      <header>
        <h1 @click="changeTitle">{{title}}</h1>//绑定一个点击事件
      </header>
    </template>
    <script>

    2.子组件中响应该点击事件的函数中使用$emit来触发一个自定义事件,并传递一个参数

    <script>
    export default {
      name: 'app-header',
      data() {
        return {
          title:"Vue.js Demo"
        }
      },
      methods:{
        changeTitle() {
          this.$emit("titleChanged","子向父组件传值");//自定义事件  传递值“子向父组件传值”
        }
      }
    }
    </script>

    3.在父组件(App根组件)中的子标签中监听该自定义事件并添加一个响应该事件的处理方法

    <template>
      <p id="app">
        <app-header v-on:titleChanged="updateTitle($event)" ></app-header>//与子组件titleChanged自定义事件保持一致,updateTitle($event)接受传递过来的文字
        <h2>{{title}}</h2>
      </p>
    </template>
    <script>
    import Header from "./components/Header"
    export default {
      name: 'App',
      data(){
        return{
          title:"传递的是一个值"
        }
      },
      methods:{
        updateTitle(e){   //声明这个函数
          this.title = e;
        }
      },
      components:{
       "app-header":Header,
      }
    }
    </script>

    六、总结

    在通信中,无论是子组件向父组件传值还是父组件向子组件传值,他们都有一个共同点就是都有中间介质,子向父的介质是自定义事件,父向子的介质是props中的属性。

    以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

    相关推荐:

    使用c+v让vue返回顶部组件

    以上就是Vue中父子组件间的通信的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:html5 vue.js javascript
    上一篇:Vue中eventbus的解析 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 一文聊聊node中的path模块• 浅析Angular变更检测中的订阅异步事件• 聊聊如何选择一个最好的Node.js Docker镜像?• Angular中什么是变更检测?什么情况下会引起变更检测?• 一文带你深入了解Node中的Buffer类
    1/1

    PHP中文网