VueJS如何用发射替换调度

Posted

技术标签:

【中文标题】VueJS如何用发射替换调度【英文标题】:VueJS how to replace dispatch with emit 【发布时间】:2017-08-19 00:26:18 【问题描述】:

我想从子组件向父组件发送信号。我不想使用 Vuex,因为我的 VueJS 知识水平 Vuex 太复杂了。我正在使用单个文件组件。

child.vue

<script>
export default 
name: 'ChildComponent',
methods: 
    // ajax post here ...
    if (response.data.status === 'accepted')
      this.$emit('send-data', 'accepted')
    

父.vue

<script>
import ChildComponent from './ChildComponent.vue'
export default 
    name: 'Parent',
    data () 
      return 
        stage: 1
      
    ,
  components: 
      ChildComponent
  ,
  // how can I replace 'events' with $on in a single file component and listen for events after all components have been created
  events: 
  'send-data': function (dataResponse) 
    if (dataResponse === 'accepted')
      this.stage = 2
    
  

VueJS 文档中的示例为父级显示了类似的内容:

var eventHub = new Vue()
created: function () 
  eventHub.$on('add-todo', this.addTodo)
  eventHub.$on('delete-todo', this.deleteTodo)
,

但我想随时收听事件,而不仅仅是创作。如何用 $on 函数替换父母的“事件”?

【问题讨论】:

在创建的事件上附加事件意味着,监听开始创建。它不限于创建步骤。 【参考方案1】:

如果您开始监听 created 上的事件,这将适用于组件的整个生命周期。或者,您可以在使用组件时使用v-on@ 快捷方式将事件设置为触发。

例子

Vue.component('my-component', 
  template: '<div><button v-on:click="sendHello">hello</button></div>',
	
	methods:
		sendHello: function()
			console.log('hello');
          this.$emit('hello','hello')
		
	
);
new Vue(
  el: '#app',
  data: 
    message: 'Hello Vue.js!'
  ,
	methods:
		sayHi: function()
			console.log('say hi')
		
	
)
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>VueJs</title>

</head>
<body>
<div id="app">
  <p> message </p>
	<my-component v-on:hello='sayHi'></my-component>
</div>
<script src="https://unpkg.com/vue/dist/vue.js"></script>	
</body>
</html>

【讨论】:

以上是关于VueJS如何用发射替换调度的主要内容,如果未能解决你的问题,请参考以下文章

如何用ajax响应替换html元素?

如何用 CADisplayLink 替换 NSTimer?

如何用一个字符替换两个字符?

如何用 QSqlTableModel 中的列替换行?

如何用一个值替换多个值python

如何用 UIGestureRecognizer 替换 TouchesBegan