带着实例继续学习(2):父子组件通信之自定义事件
2016-10-19 19:58
776 查看
要点
我们利用之前学到的知识点做了一个用户登录框,其中1、我们通过
this.$parent.$refs访问相邻组件的数据
2、一般来讲,我们可以把父组件作为子组件的”集中营”(集中数据状态和事件)
接下来我们看套路:
第一步:父组件初始化数据
在父组件首先初始化,示例如下:export default{
data(){
return{username:”“,userpass:”“}
}
}
第二步:在父组件中设置方法
methods:{setUserName(uname){
this.username = uname;
}
},
比如我们现在的父亲组件user-login.vue
<template> <div id="user-login" class="col-md-8 col-md-offset-2"> <h2 class="text-center">用户登录</h2> <form class="form-horizontal" role="form"> <user-name ref="uname" placeholder="请输入你的用户名"></user-name> <user-pass></user-pass> <user-submit></user-submit> </form> </div> </template> <style> @import "./../css/bootstrap.min.css"; #user-login{ margin-top: 50px; } </style> <script> import username from "./user/use-name.vue"; import usersubmit from "./user/user-submit.vue"; import userpass from "./user/user-pass.vue"; export default{ data(){ return{ username:"", userpass:"" } }, methods:{ setUserName(uname){ this.username = uname; } }, components:{ "user-name":username, "user-submit":usersubmit, "user-pass":userpass } } </script>
那么问题来了:怎么触发这个方法呢?
在子组件中设置一个自定义事件updateUserName是一个自定义事件名称。
在子组件中通过this.$emit(“事件名”,参数)来触发父组件的事件。
父组件user-login.vue
<user-name ref="uname" placeholder="请输入你的用户名" v-on:updateUserName="setUserName"></user-name>
export default{ data(){ return{ username:"", userpass:"" } }, methods:{ setUserName(uname){ this.username = uname; } }, components:{ "user-name":username, "user-submit":usersubmit, "user-pass":userpass } }
在子组件里调用的是方法是
updateUserName
来到子组件user-name.vue
<input type="text" v-model="username" v-on:change="userNameChange" class="form-control" :placeholder="username">
文本框change事件调用方法
userNameChange
<script> export default{ props:["placeholder"], data:function () { return {username:"张三"} }, methods:{ userNameChange(){ // 调用父组件的方法 this.$emit("updateUserName",this.username) } } } </script>
userNameChange方法里调用父组件的自定义方法,把值传递过去。
这样在user-submit.vue就可以拿到父组件里的值了:
<script> export default{ methods:{ test(){ alert(this.$parent.$data.username); // 拿到父组件了定义是属性username } } } </script>
相关文章推荐
- 带着实例继续学习(4):下拉框数据填充、组件生命周期、动态绑定事件
- 带着实例继续学习(1):组件式登录页面-点击事件、组件通讯
- vue 组件递归,非父子间组件通信简单实例
- Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
- vue学习笔记--父子组件通信
- Vue父子组件之间的通信实例详解
- 饿了么项目---12、父子组件、兄弟组件之间数据通信与事件派发(关于购物车添加按钮的动画)
- Vue.js入门学习--父子组件的说明和简单通信(十)
- vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
- vue.js学习笔记(三)--父子组件通信总结
- vue.js通过子组件通信和父子组件通信实现动态表单动态绑定事件(适合交互系统统一使用)
- Vue父子组件互相通信实例
- unix学习笔记---------自己写的管道实例----父子进程通信
- vue.js父子组件通信动态绑定的实例
- vue之父子组件间通信实例讲解(props、$ref、$emit)
- Angular2 父子组件数据通信实例
- vue自定义事件 子组件向父组件通信
- Vue2.0学习之详解Vue 组件及父子组件通信
- IssueVision 学习笔记(二)-----为控件添加自定义属性和事件
- 有关AutoCompleteBox组件的研究[2]_常用特性实例介绍——Silverlight学习笔记[37]