一、父子组件间通信

vue.js 2.0提供了一个ref 的属性: 可以为子组件指定一个索引id

父组件:

<template>
<div id='user-login'>
<h2 class='text-center'>用户登录</h2>
<form class='form-horizontal' role='form'>
<user-name ref='uname' placeholder='请输入你的用户名'></user-name>
<user-submit></user-submit>
</form>
</div>
</template>
<style>
#user-login{
margin-top: 50px;
}
</style> <script>
import username from './loginName.vue'
import usersubmit from './loginSubmit.vue'
export default{
components: {
'user-name': username,
'user-submit': usersubmit
}
}
</script>
子组件一:
<template>
<div>
<div class='form-group'>
<label>用户名</label>
<div>
<input type='text' class='form-control' v-model="username" :placeholder='username'>
</div>
</div>
</div>
</template> <script>
export default{
props: ['placeholder'],
data: function () {
return {username: '张三'}
}
}
</script>
子组件2:
<template>
<div class="form-group">
<div>
<button type="button" class="btn btn-default" v-on:click="test">提交</button>
</div>
</div>
</template>
<script>
export default{
data () {
},
methods: {
test () {
alert(this.$parent.$refs.uname.$data.username)
}
}
}
</script> 二、父子之间通信之自定义事件
父组件:
<template>
<div id='user-login'>
<h2 class='text-center'>用户登录</h2>
<form class='form-horizontal' role='form'>
<user-name placeholder='请输入你的用户名' @updateUserName="setUserName"></user-name>
<user-submit></user-submit>
</form>
</div>
</template>
<style>
#user-login{
margin-top: 50px;
}
</style> <script>
import username from './loginName.vue'
import usersubmit from './loginSubmit.vue'
export default{
components: {
'user-name': username,
'user-submit': usersubmit
},
data () {
return {
username: ''
}
},
methods: {
setUserName (uname) {
this.username = uname
}
}
}
</script> 子组件1:
<template>
<div>
<div class='form-group'>
<label>用户名</label>
<div>
<input type='text' class='form-control' v-model='username' :placeholder='username' @change='userNameChange'>
</div>
</div>
</div>
</template> <script>
export default{
props: ['placeholder'],
data: function () {
return {
username: '张三'
}
},
methods: {
userNameChange () {
// 调用父组件的方法
this.$emit('updateUserName', this.username)
}
}
}
</script> 子组件2:
<template>
<div class="form-group">
<div>
<button type="button" class="btn btn-default" v-on:click="test">提交</button>
</div>
</div>
</template>
<script>
export default{
data () {
return { }
},
methods: {
test () {
alert(this.$parent.$data.username)
}
}
}
</script>
三、子组件何时被挂载到父组件上的?动态绑定组件
在mounted时
父组件:
<template>
<div id='user-login'>
<h2 class='text-center'>用户登录</h2>
<form class='form-horizontal' role='form'>
<user-name placeholder='请输入你的用户名' @updateUserName='setUserName'></user-name>
<user-area></user-area>
<user-submit></user-submit>
</form>
</div>
</template>
<style>
#user-login{
margin-top: 50px;
}
</style> <script>
import username from './loginName.vue'
import usersubmit from './loginSubmit.vue'
import userArea from './loginArea.vue'
export default{
components: {
'user-name': username,
'user-submit': usersubmit,
'user-area': userArea
},
data () {
return {
username: ''
}
},
mounted () {
// alert(this.$children.length) // 结果为4,说明子组件到这里已经挂载上了
this.$children.forEach(function (cc) {
cc.$on('childChange', this.setValue)
}.bind(this))
},
methods: {
setUserName (uname) {
this.username = uname
},
setValue (key, value) {
this.$data[key] = value
alert(this.$data[key])
}
}
}
</script>
子组件1:
<template>
<div>
<div class='form-group'>
<label>用户名</label>
<div>
<input type='text' class='form-control' v-model='username' :placeholder='username' @change='userNameChange'>
</div>
</div>
</div>
</template> <script>
export default{
props: ['placeholder'],
data: function () {
return {
username: '张三'
}
},
methods: {
userNameChange () {
// 调用父组件的方法
this.$emit('updateUserName', this.username)
}
}
}
</script>
子组件2:
<template>
<div class='form-group'>
<label class='col-sm-2'>地区</label>
<div class='col-sm-10'>
<select v-model='selectedIndex' class='form-group' v-on:change='seletecChange'>
<option v-for='a in areas' v-bind:value='a.id'>{{a.text}}</option>
</select>
</div>
</div>
</template> <script>
export default{
data () {
return {
selectedIndex: 0,
areas: [
{'id': 0, 'text': '--请选择--'},
{'id': 1, 'text': '北京'},
{'id': 2, 'text': '上海'}
]
}
}, methods: {
seletecChange () {
this.$emit('childChange', 'userarea', this.selectedIndex)
}
}
}
</script>
子组件3:
<template>
<div class="form-group">
<div>
<button type="button" class="btn btn-default" v-on:click="test">提交</button>
</div>
</div>
</template>
<script>
export default{
data () {
return { }
},
methods: {
test () {
alert(this.$parent.$data.username)
}
}
}
</script>
四、搜索框功能
<template>
<div class='form-group'>
<label class='col-sm-2 control-label'>爱好</label>
<div class='col-sm-10'>
<input type='text' class='form-control' v-model='inputText'>
<br>
<table class='table table-bordered' v-if='showTable()'>
<thead>
<th>类别1</th>
<th>类别2</th>
</thead>
<tbody>
<tr v-for='f in favs'>
<td>{{f.class1}}</td>
<td>{{f.class2}}</td>
</tr>
</tbody>
</table>
</div>
</div>
</template> <script>
export default{
data () {
return {
inputText: '',
favs: [
{'class1': '前端开发', 'class2': 'js'},
{'class1': '后端开发', 'class2': 'java'}
]
}
},
methods: {
showTable () {
if (this.inputText === '') return false
return true
}
},
computed: {
getFavs () {
return this.favs.filter(function (value) {
if (value.class2.indexOf(this.inputText) >= 0) {
return true
} else {
return false
}
}.bind(this))
}
}
}
</script> getFavs 方法返回一个新的数组,array.filter(callback) 回调函数内部做了判断,最后返回符合判断条件的新的数据。

vue父子组件通信的更多相关文章

  1. Vue父子组件通信(父级向子级传递数据、子级向父级传递数据、Vue父子组件存储到data数据的访问)

    Vue父子组件通信(父级向子级传递数据.子级向父级传递数据.Vue父子组件存储到data数据的访问) 一.父级向子级传递数据[Prop]: ● Prop:子组件在自身标签上,使用自定义的属性来接收外界 ...

  2. vue 父子组件通信

    算是初学vue,整理一下父子组件通信笔记. 父组件通过 prop 给子组件下发数据,子组件通过事件给父组件发送消息. 一.父组件向子组件下发数据: 1.在子组件中显式地用props选项声明它预期的数据 ...

  3. vue父子组件通信高级用法

    vue项目的一大亮点就是组件化.使用组件可以极大地提高项目中代码的复用率,减少代码量.但是使用组件最大的难点就是父子组件之间的通信. 子通信父 父组件 <template> <div ...

  4. vue 父子组件通信详解

    这是一篇详细讲解vue父子组件之间通信的文章,初始学习vue的时候,总是搞不清楚几个情况 通过props在父子组件传值时,v-bind:data="data",props接收的到底 ...

  5. vue 父子组件通信props/emit

    props 1.父组件传递数据给子组件 父组件: <parent> <child :childMsg="msg"></child>//这里必须要 ...

  6. beego+vue父子组件通信(父子页面传值、父子组件传值、父子路由传值)

    场景:有head和foot,为父组件 侧栏tree为子组件 点击tree,右侧孙组件根据点击tree的id,来更改表格内容. 首先是父子(本例中是子组件与孙组件)通信,目前是父传到子,暂时还没有子传到 ...

  7. vue父子组件通信传值

    父组件 -> 子组件 通过props来进行通信 父组件代码: <Children :dataName = "dataContent" /> //dataName: ...

  8. Vue 父子组件通信入门

    父组件向子组件传值 1.组件实例定义方式,注意:子组件一定要使用props属性来定义父组件传递过来的数据 <script type="text/javascript"> ...

  9. vue 父子组件通信-props

    父组件:引用了ComBack组件 ComBack组件:引用了BasicInfor组件 先使用props获取父组件的headInfo这个对象,这里注意(default)默认返回值要用工厂形式返回 Bas ...

随机推荐

  1. listView属性随笔--不断增加中。

    对于一个控件的认识总是会随着时间的推移,而变的逐渐深刻. 简单的就 android:layout_height:属性来说给的数值不同就会有不同的效果,有些时候你根本想不到是跟这个属性的设置有关. 有时 ...

  2. ORACLE - 管理控制文件

    在oracle中,控制文件极其重要,如果该文件损坏并在没有备份的情况下,数据库将无法启动,里面的数据也将无法读取恢复,一般情况下,对数据库配置好了以后备份控制文件: 1. 查看控制文件 SQL> ...

  3. 35. leetcode 501. Find Mode in Binary Search Tree

    501. Find Mode in Binary Search Tree Given a binary search tree (BST) with duplicates, find all the  ...

  4. JAVA,JSP,Servlet获取当前工程路径-绝对路径

    在jsp和class文件中调用的相对路径不同. 在jsp里,根目录是WebRoot 在class文件中,根目录是WebRoot/WEB-INF/classes 当然你也可以用System.getPro ...

  5. 自定义Git之搭建Git服务器

    在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没啥不同,纯粹为了7x24小时开机并交换大家的修改. GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想 ...

  6. git远程仓库之从远程库克隆

    上次我们讲了先有本地库,后有远程库的时候,如何关联远程库. 现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆. 首先,登陆GitHub,创建一个新的仓库,名字叫gitskill ...

  7. AKOJ -- 1529 -- 寻找最大数

    1529: 寻找最大数 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 107  Solved: 53 上一题SubmitStatus标签打分编辑题目信 ...

  8. 打造颠覆你想象中的高性能,轻量级的webform框架---无刷新提交后台并返回参数(第五天)

    问题5:  使用aspx 页面执行后台方法,总是要刷新整个页面?我想提交后台不刷新页面,同时返回参数 执行前台的js 脚本,就是说类似于像 ajax 的效果一样,那我们该怎么做呢? 大家是否已经看了前 ...

  9. Loadrunner常见错误处理方法

    1.错误 -26601: 解压缩函数(wgzMemDecompressBuffer)失败,返回代码=-5 (Z_BUF_ERROR).inSize=0.inUse=0.outUse=0 用LR做压力测 ...

  10. Python下的OpenCV学习 02 —— 图像的读取与保存

    OpenCV提供了众多对图片操作的函数,其中最基本的就是图片的读取与输出了. 一.读取图片 利用OpenCV读取一张图片是非常容易的,只需要用到 imread() 函数,打开shell或者cmd,进入 ...