<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. 修改hostname

    修改hostname步骤 1. 修改/etc/sysconfig/network中的hostname选项 2. 在/etc/hosts中添加hostname对应的ip地址 3.执行命令:hostnam ...

  2. 关于html/css的一些小技巧之hack掉"margin-top"层叠问题

    身为小前端菜鸟一枚,忽然听到这样一则传言~~ 心情久久不能平复,想到前几日,开通了博客君,特来此寻找存在feeling~ 旨在造福普罗大众(更多前端小菜鸟) 话不多说, 我们步入正题,今天来给大家分享 ...

  3. mvc partialView+kendo window

    在写mvc项目时,一个列表查询页面含有多个操作按钮及弹框操作.原本写在了一个view中,导致代码繁多复杂,难以维护,还有表单赋值清空.验证等麻烦. 因此改用kendo window +partialV ...

  4. WinForm中 Asp.Net Signalr消息推送测试实例

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  5. [经验共享] MapGIS实用小功能图解——由excel文件导成MapGIS点文件

    项目小组的几个成员都是学地下水和环境的,对于GIS懂得不是很多,于是把一些我们经常用到的mapgis实用小功能做成帮助文档,方便大家使用,发布共享! 1.整理好EXCEL文件(注意X,Y坐标的正确性( ...

  6. laravel 自动加载 自定义的文件/辅助函数

    需求 在 laravel 中自定义了一些 辅助函数,想要laravel框架自动加载这些函数 实现 将自定义的辅助函数放在helpers.php文件中,如下: 在compsoer.json 的 auto ...

  7. python selenium web自动化测试完整项目实例

    问题: 好多想不到的地方,中间经历了一次重构,好蛋疼: xpath定位使用的不够熟练,好多定位问题,只能靠强制等待解决: 存在功能重复的方法,因为xpath定位不同,只能分开写,有时间可以继续优化: ...

  8. String<-->int

    String s = "123); int a = Integer.parseInt(s); String b = String.valueOf(a); Integer i = 100; 自 ...

  9. LeetCode Weekly Contest 117

    已经正式在实习了,好久都没有刷题了(应该有半年了吧),感觉还是不能把思维锻炼落下,所以决定每周末刷一次LeetCode. 这是第一周(菜的真实,只做了两题,还有半小时不想看了,冷~). 第一题: 96 ...

  10. C类网络子网掩码速查

    子网掩码 网络位数 子网数量 可用主机数 255.255.255.252 30 64 2 255.255.255.248 29 32 6 255.255.255.240 28 16 14 255.25 ...