1、broadcast 事件广播

  遍历寻找所有子孙组件,假如子孙组件和componentName组件名称相同的话,则触发$emit的事件方法,数据为 params.
  如果没有找到 则使用递归的方式 继续查找孙组件,直到找到为止,否则继续递归查找,直到找到最后一个都没有找到为止。 

2、dispatch 查找所有父级,直到找到要找到的父组件,并在身上触发指定的事件。
 @param { componentName } 组件名称
@param { eventName } 事件名
@param { params } 参数

vue2.0

父传子:Props
子传父:子:$emit(eventName) 父$on(eventName)
父访问子:ref
非父子组件通信:https://vuefe.cn/guide/components.html#非父子组件通信
vue2.0 移除:1.$dispatch() 2.$broadcast() 3.events

vue1.0

<template>
<div id="app">
<p>{{title}}</p>
<p v-text="title"></p>
<p v-text="title2"></p>
<p v-html="title2"></p>
</div>
</template>
<script>
export default {
data () {
return {
title: 'this is a title!',
title2: '<span>?<span> this is a title!'
}
}
}
</script>
  • {{title}}v-text="title"等同
  • export default最后生成 new vue({ 参数})
  • 新的ES6写法等同于旧的写法

    //新的ES6
    data () {
    return {
    title: 'this is a title!'
    }
    }
    //旧的写法
    data: function (){
    return {
    title: 'this is a title!'
    }
    }
  • v-html 解析渲染html标签

v-for 及v-bind控制class、v-on绑定事件、v-model双向绑定

<template>
<div id="app">
<p>{{title}}</p>
<!-- <p v-text="title"></p> -->
<!-- <p v-text="title2"></p> -->
<!-- <p v-html="title2"></p> -->
<input v-model="newItem" v-on:keyup.enter="addNew">
<ul>
<li v-for = "item in items" v-bind:class="{finished: item.isFinished}" v-on:click="toggleFinished(item)">
{{item.label}}
</li>
</ul>
</div>
</template>
<script>
import Store from './store'
export default {
data () {
return {
title: 'this is a todolist!',
title2: '<span>?<span> this is a todolist!',
items: Store.fetch(),
newItem: ''
}
},
watch: {
items: {
handler (items) {
Store.save(items)
},
deep: true
}
},
methods: {
toggleFinished (item) {
item.isFinished = !item.isFinished
},
addNew () {
this.items.push({
label: this.newItem,
isFinished: false
})
this.newItem = ''
}
}
}
</script> <style>
.finished{
text-decoration: underline;
} html {
height: 100%;
} body {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
} #app {
color: #2c3e50;
margin-top: -100px;
max-width: 600px;
font-family: Source Sans Pro, Helvetica, sans-serif;
text-align: center;
} #app a {
color: #42b983;
text-decoration: none;
} .logo {
width: 100px;
height: 100px
}
</style>

store.js

const STORAGE_KEY = 'todos-vuejs'
export default {
fetch () {
return JSON.parse(window.localStorage.getItem(STORAGE_KEY) || '[]')
},
save (items) {
window.localStorage.setItem(STORAGE_KEY, JSON.stringify(items))
}
}
  • v-bind:class简写:class
  • v-on:click简写@click
  • v-on:keyup.enter简写@keyup.enter 回车keyup事件
  • v-model 双向绑定

JSON.parse()和JSON.stringify()

  • parse用于从一个字符串中解析出json 对象。例如
    var str='{"name":"cpf","age":"23"}'

经 JSON.parse(str) 得到:

Object: age:"23"
name:"cpf"
_proto_:Object

ps:单引号写在{}外,每个属性都必须双引号,否则会抛出异常

  • stringify用于从一个对象解析出字符串,例如

var a={a:1,b:2}

经 JSON.stringify(a)得到:

“{“a”:1,"b":2}”

自定义事件

  • 使用 $on() 监听事件;

  • 使用 $emit()在它上面触发事件;

  • 使用 $dispatch()派发事件,事件沿着父链冒泡;

  • 使用 $broadcast()广播事件,事件向下传导给所有的后代。

父组件向子组件传递

1、采用props

父组件

<component-a msgfromfather='you die!!!!'></component-a>

子组件

<template>
<div class="hello">
<h1>{{ msgfromfather }}</h1>
<button v-on:click="onClickMe">click!</button>
</div>
</template> <script>
export default {
data () {
return {
}
},
props: ['msgfromfather'],
methods: {
onClickMe () {
console.log(this.msgfromfather)
}
}
}
</script>
<style scoped>
h1 {
color: #42b983;
}
</style>
  • props监听父组件传递过来的信息
  • 传递过来后,可直接引用,就如已经传递过来数据塞到data
2、使用event,$broadcast()从父组件传递消息下去

父组件

<template>
<button v-on:click="talkToMyBoy('be a good boy')">talkToMyBoy</button>
</div>
</template>
<script>
import Store from './store'
import ComponentA from './components/componentA'
export default {
components: {
ComponentA
},
methods: {
talkToMyBoy (msg) {
//console.log(msg);
this.$broadcast('onAddnew',msg)
}
}
}
</script>

子组件

<template>
<div class="hello">
<h1>{{ listentomyfather }}</h1>
</div>
</template>
<script>
export default {
data () {
return {
listentomyfather: 'Hello from componentA!'
}
},
events: {
'onAddnew' (msg) {
//console.log(msg)
this.listentomyfather = msg
}
}
}
</script>

子组件向父组件传递

1.子组件$emit()触发,父组件$on()监听
<template>
<div class="hello">
<button v-on:click="onClickMe">telltofather</button>
</div>
</template> <script>
export default {
methods: {
onClickMe () {
this.$emit('child-tell-me-something',this.msg)
}
}
}
</script>

父组件

<template>
<div id="app">
<p>child tell me: {{childWords}}</p>
<component-a v-on:child-tell-me-something='listenToMyBoy'></component-a>
</div>
</template> <script>
import Store from './store'
import ComponentA from './components/componentA'
export default {
components: {
ComponentA
},
data () {
return {
childWords: ''
}
},
methods: {
listenToMyBoy (msg) {
this.childWords = msg
}
}
}
</script>
2.不使用v-on,使用event ,子组件$dispatch(),从子组件传递消息上去

子组件

<template>
<div class="hello">
<button v-on:click="onClickMe">talktomyfather</button>
</div>
</template> <script>
export default {
methods: {
onClickMe () {
this.$dispatch('child-tell-me-something',this.msg)
}
}
}
</script>

父组件

<template>
<div id="app">
<p>child tell me: {{childWords}}</p>
<component-a></component-a>
</div>
</template> <script>
import Store from './store'
import ComponentA from './components/componentA'
export default {
components: {
ComponentA
},
data () {
return {
childWords: ''
}
},
events: {
'child-tell-me-something' (msg) {
this.childWords = msg
}
}
}
</script>

作者:俊瑶先森
链接:http://www.jianshu.com/p/240125faeb79
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

dispatch emit broadcast的更多相关文章

  1. vue之自行实现派发与广播-dispatch与broadcast

    要解决的问题 主要针对组件之间的跨级通信 为什么要自己实现dispatch与broadcast? 因为在做独立组件开发或库时,最好是不依赖第三方库 为什么不使用provide与inject? 因为它的 ...

  2. 如何实现Vue已经弃用的$dispatch和$broadcast方法?

    对于父子(含跨级)传递数据的通信方式,Vue.js 并没有提供原生的 API 来支持,而是推荐使用大型数据状态管理工具 Vuex,但 Vuex 对于小型项目来说用起来真的很麻烦. 在 Vue.js 1 ...

  3. AngularJS里面$emit, $broadcast,$on,$http.Jsonp,constant是使用笔记

    本片主要介绍$emit, $broadcast,$on经常开发的用法!

  4. Angular中Controller之间的信息传递(第二种办法):$emit,$broadcast,$on

    $emit只能向parent controller传递event与data( $emit(name, args) ) $broadcast只能向child controller传递event与data ...

  5. AngularJS 事件广播与接收 $emit $broadcast $on

    AngularJS中的作用域scope有一个非常有层次和嵌套分明的结构. 其中它们都有一个主要的$rootScope(也就说对应的Angular应用或者ng-app),然后其他所有的作用域部分都是继承 ...

  6. $scope绑定事件之$on方法和$emit,$broadcast

    function DemoCtrl($scope){ $scope.count = 0; $scope.$on('myevent',function(){ $scope.count++; }) } 视 ...

  7. 父子间通信四 ($dispatch 和 $broadcast用法)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 理解angularJs中的$on,$broadcast,$emit

    $emit作用是将一个事件从子作用域广播至父作用域,直至根作用域.(包括自己) $emit有两个参数name和args,name就是需要广播的名字,args是一个或者多个参数. $broadcast的 ...

  9. angular之$broadcast、$emit、$on传值

    文件层级 index.html <!DOCTYPE html> <html ng-app="nickApp"> <head> <meta ...

随机推荐

  1. 用Python识别网站使用的技术

    在进行爬虫之前,一般我们都会对要爬取的网站进行识别,识别我们要爬取的网站所使用到的技术,这样才能更有利于我们爬虫工作的进行.所以在此介绍以下如何用Python去识别一个网站所使用到的技术. 环境:Py ...

  2. 如何模拟click事件,打开一个a标签链接?

    在项目开发过程中,我们经常会碰到通过接口返回一个地址,同时在新的tab页面打开一个网址的情况,最直观的想法就是通过window.open(url)的方式,打开一个新的页面,但是大部分浏览器会遭遇拦截. ...

  3. 暑假集训D10总结

    刷题 今天上了一天的树,然后就下不来了,(根本就没上去吧) 打了道256行的SpalySplay,然后在COGS上过了道4星半的[NOI2005]维护数列,然后--我发现!@#在内网上竟然E了(喵喵喵 ...

  4. [Git] 1、常用Git命令行总结(一)

    一.GIT CLONE最常用的有如下几个 1.最简单直接的命令:git clone xxx.git 2.如果想clone到指定目录:git clone xxx.git “指定目录” 3.clone时创 ...

  5. git远程仓库之添加远程库

    现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举 ...

  6. akoj-1074-人见人爱A^B

    人见人爱A^B Time Limit:1000MS  Memory Limit:65536K Total Submit:91 Accepted:55 Description 求A^B的最后三位数表示的 ...

  7. numastat的理解

    numa的统计数据及理解如下, [root@localhost kernel]# numastat                     node0           node1numa_hit ...

  8. 一步一步学MySQL-日志文件

    错误日志 错误日志不用多说,记录了mysql运行过程中的错误信息,当出现问题时,我们可以通过错误日志查找线索. 慢查询日志 可以通过参数long_query_time来设置时间,当sql语句执行超过指 ...

  9. 程序员/PM怎么让项目预估的时间更加准确

    项目时间的估算对项目的成败至关重要.项目时间管理包括了项目按时完成所需的各个过程.但是,在实际项目中,经常出现项目延期,估算严重不准确的现象. 一个我曾经共事过的很有经验的项目经理曾宣称说,他会拿程序 ...

  10. ARM处理器架构的Thumb指令集中关于IT指令的使用

    在ARMv6T2以及ARMv7架构扩展了Thumb指令集,其中加入了IT指令,进一步增强了代码的紧凑性. Thumb中有一个比较有意思的指令--IT,这条指令用于根据指定的条件来执行后面相继的四条指令 ...