为了账号安全,请及时绑定邮箱和手机立即绑定

Vue2.0父子组件间通信

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

运行环境搭建

Vue引入方式一般有三种:
第一种CDN引入

<script class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="[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//安装cnpmcnpm install -g vue-cli//cnpm安装脚手架vue init webpack my-project
cd my-project
cnpm install
cnpm run dev

最后打开http://localhost:8080,就出现下面的页面,标志着脚手架搭建完成了。


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

脚手架搭建完成后,project里面各个文件夹及文件,如下图:


脚手架各个文件和文件夹

src文件流程介绍

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

根组件App介绍

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

vue组件嵌套

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

1.组件全局定义

一般以下两个步骤:

  1. main.js引入子组件

  2. App.vue组件中template调用

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

一般以下三个步骤:

  1. import引入子组件

  2. export default注册子组件

  3. template模板中加入子组件

根组件App

父组件向子组件传值

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

1.创建子组件,在src/components/文件夹下新建一个Users.vue子组件
2.在App.vue中注册Users.vue组件,并在template中加入users标签
//App.vue父组件<template>
  <div id="app">
    <users v-bind:users="users"></users>//前者自定义名称便于子组件调用,后者要传递数据名  </div></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>
  <div class="hello">
    <ul>
      <li v-for="user in users">{{user}}</li>//遍历传递过来的值,然后呈现到页面    </ul>
  </div></template><script>export default {  name: 'HelloWorld',  props:{    users:{           //这个就是父组件中子标签自定义名字
      type:Array,      required:true
    }
  }
}</script>

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

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

子组件向父组件传值之前

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>
  <div id="app">
    <app-header v-on:titleChanged="updateTitle($event)" ></app-header>//与子组件titleChanged自定义事件保持一致,updateTitle($event)接受传递过来的文字    <h2>{{title}}</h2>
  </div></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中的属性。


作者:浪里行舟
链接:https://www.jianshu.com/p/6fd90f3bb8a3


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消