<div id="app">
<xz-todo></xz-todo>
</div>
<!--1. 为每个组件定义HTML 模板,有几个组件,就要创建几个template-->
<template id="tplTodo">
<div>
<h3>父组件xz-todo: 代办事项列表</h3>
<xz-todo-input></xz-todo-input>
<!--父要给子tasks(右),绑定在子的tasks属性(左)中-->
<xz-todo-list :tasks="tasks"></xz-todo-list>
</div>
</template>
<template id="tplTodoInput">
<div>
<h6>子组件xz-todo-input</h6>
<input v-model="input" @keyup.13="addFun"><button @click="addFun">添加</button>
</div>
</template>
<template id="tplTodoList">
<div>
<h6>子组件xz-todo-list</h6>
<ul>
<xz-todo-item v-for="(t,i) in tasks" :t="t" :i="i" @remove="removeHandler">
<!--当子组件触发remove时,就自动执行handler-->
</xz-todo-item>
</ul>
</div>
</template>
<template id="tplTodoItem">
<li>
<p>孙子组件xz-todo-item</p>
<span>{{t}}</span><button @click="removeFun">x</button>
</li>
</template>
<script>
var bus=new Vue();//先建公交车
//2. 除全局父组件外,为每个子组件创建对象
var xzTodoInput={
template:"#tplTodoInput",
data:function(){
return { input:"" }
},
methods:{
addFun(){
if(this.input.trim()!==""){
bus.$emit("add",this.input)
this.input="";
}
}
}
};
var xzTodoItem={//强调: 子组件对象必须先于父组件定义
template:"#tplTodoItem",
//因为子想要任务名(显示)和下标(删除)
props:["t","i"],
methods:{
removeFun(){
if(confirm("是否删除?"))
this.$emit("remove",this.i);
}
}
};
var xzTodoList={
template:"#tplTodoList",
props:["tasks"],//因为子想要tasks列表
components:{
//可用components继续包含更子级组件
xzTodoItem
},
methods:{
//当remove发生时,自动调用handler,获得子组件传来的i
removeHandler(i){
this.tasks.splice(i,1);
}
},
mounted(){
//this->Vue
bus.$on("add",input=>{//必须用=>
this.tasks.push(input)
})
}
};
//3. 定义全局父组件,components中仅包含直接子组件
Vue.component("xz-todo",{
template:"#tplTodo",
data:function(){
return {//1. 因为整个组件需要一个任务列表,所以:
tasks:[]
}
},
components:{//子组件
xzTodoInput,//xz-todo-input
xzTodoList //xz-todo-list
},
mounted(){//2. 在全局父组件中,加载并保存列表数据
this.tasks=["吃饭","睡觉","打豆豆"];
}
})
//4. new Vue()
new Vue({
el:"#app",
data:{}
})
</script>

Vue非父子级通信的更多相关文章

  1. Vue 非父子组件通信方案

    Vue 非父子组件通信方案 概述 在 Vue 中模块间的通信很普遍 如果是单纯的父子组件间传递信息,父组件可以使用 props 将数据向下传递到子组件,而在子组件中可以使用 events (父组件需要 ...

  2. Vue 非父子组件通信

    组件是Vue核心的一块内容,组件之间的通信也是很基本的开发需求.组件通信又包括父组件向子组件传数据,子组件向父组件传数据,非父子组件间的通信.前两种通信Vue的文档都说的很清楚,但是第三种文档上确只有 ...

  3. 详解Vue 非父子组件通信方法(非Vuex)

    假设 bb 组件里面有个按钮,点击按钮,把 123 传递给 aa 组件 // 根组件(this.$root) new Vue({ el: '#app', router, render: h => ...

  4. vue父子组件及非父子组件通信

    1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: <parent> <child :child-msg="msg" ...

  5. vue组件通信之非父子组件通信

    什么顺序不顺序的.. 先来说说非父子组件通信. 首先,我们先来了解下vue中的 1.$emit  触发当前实例上的事件,附加参数都会传给监听器回调. 2.$on  监听当前实例上的自定义事件.事件可以 ...

  6. vue2.0父子组件以及非父子组件通信

    官网API: https://cn.vuejs.org/v2/guide/components.html#Prop 一.父子组件通信 1.父组件传递数据给子组件,使用props属性来实现 传递普通字符 ...

  7. vue2.0父子组件以及非父子组件通信传参详解

    1.父组件传递数据给子组件 父组件数据如何传递给子组件呢?可以通过props属性来实现 父组件: <parent> <child :child-msg="msg" ...

  8. vue非父子组件间通信

    有时候非父子关系的组件也需要通信.在简单的场景下,使用一个空的Vue实例作为中央事件总线: 有时候非父子关系的组件也需要通信.在简单的场景下,使用一个空的 Vue 实例作为中央事件总线: var bu ...

  9. vue 2 使用Bus.js进行兄弟(非父子)组件通信 简单案例

    vue2中废弃了$dispatch和$broadcast广播和分发事件的方法.父子组件中可以用props和$emit().如何实现非父子组件间的通信,可以通过实例一个vue实例Bus作为媒介,要相互通 ...

随机推荐

  1. Docker 共有 13 个管理命令和 41 个通用命令,以下是常用 Docker 命令列表

    开发人员一直在努力提高 Docker 的使用率和性能,命令也在不停变化.Docker 命令经常被弃用,或被替换为更新且更有效的命令,本文总结了近年来资深专家最常用的命令列表并给出部分使用方法. 目前, ...

  2. 从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造

    在<在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP>里面提到 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以 ...

  3. ORACLE中 大量数据插入表 SQL

    declare g_commit_count number; cursor cu1 is select gl_flexfields_pkg.get_description_sql(gcc.chart_ ...

  4. 大数据处理框架之Strom:DRPC

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 storm-0.9 一.DRPC DRPC:Distri ...

  5. liunx驱动----构造和运行模块

    以hello world模块为例 #include <linux/init.h> #include <linux/module.h> //在执行 insmod hlello 的 ...

  6. 宝塔安装swoole

    新建文件夹 mkdir swoole 切入到文件夹中,进行下载安装包 wget http://pecl.php.net/get/swoole-4.3.2.tgz 解压 tar -zxvf swoole ...

  7. C++ 屏幕录制

    http://www.pudn.com/Download/item/id/1584698.html task.renwuyi.com

  8. MySQL复制表-SELECT INTO FROM

    基础Table: mysql> select * from staff; +----+----------+-------+ | id | name | slary | +----+------ ...

  9. showDialog 必须Stateful

    showDialog 必须Stateful 因为需要context

  10. day12函数,三元表达式 ,列表推导式 ,字典推导式,函数对象,名称空间与作用域,函数的嵌套定义

    复习 # 字符串的比较 # -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 # 函数的参数 # 1)实参与形参: # -- 形参:在函数定义时()中出现的参数 # -- 实参:在函 ...