最近我一直在搞乱socket.io并发现这个有趣的事情,我可以像这样发出函数回调.
我在客户端开始像这样发射:
client.emit('eventToEmit', dataToEmit, function(error, message){
console.log(error);
console.log(message);
});
Run Code Online (Sandbox Code Playgroud)
然后我可以像这样从服务器端发出回调:
client.on('eventToEmit', function(data, callback){
console.log(data);
callback('error', 'message');
});
Run Code Online (Sandbox Code Playgroud)
一切正常,没有错误,但我感兴趣的是,如果做这样的事情是合适的,因为到目前为止我还没有在文档或任何例子中看到类似的东西.
谢谢你阅读我的问题.
我读过它
https://forum.vuejs.org/t/passing-data-back-to-parent/1201/2
概念是一样的,我需要将数据对象从子传递给父,我使用$ emit将数据传递给父组件,但不起作用.你知道出了什么问题吗?在这里检查我的代码:
Vue.component('list-products', {
delimiters: ['[[', ']]'],
template: '#list-products-template',
props: ['products'],
data: function () {
return {
productSelected: {}
}
},
methods: {
showDetailModal: function (product) {
console.log('click product in child, how can i pass this product to productSelected data in parent?');
console.log(product);
this.productSelected = product;
this.$emit('clickedShowDetailModal', product);
}
}
});
var app = new Vue({
delimiters: ['[[', ']]'],
el: '#resultComponent',
data: {
listProducts: [
{'name':'test1',id:1},
{'name':'test2',id:2},
{'name':'test3',id:3}
],
productSelected: {}
},
methods: {
clickedShowDetailModal: function …Run Code Online (Sandbox Code Playgroud)我只是偶然发现了一个看似普遍知道的compsci关键字"emit".但我在一般的计算机科学术语中找不到任何明确的定义,也没有在任何特定的编程语言中找到"emit()"函数或关键字的具体定义.
我在这里找到它,阅读MapReduce:
https://en.wikipedia.org/wiki/MapReduce
我的其他搜索的上下文显示它与信令和/或事件有关.但似乎只是假设读者会知道"发射"是什么和做什么.例如,这篇关于MapReduce模式的文章:
https://highlyscalable.wordpress.com/2012/02/01/mapreduce-patterns/
没有提到"发射"实际上在做什么,只有调用它.它必须与其他形式的返回数据不同,例如"return"或简单地"printf"或等效,否则对"emit"的调用将是对"return"的调用.
进一步搜索,我发现很多次在MapReduce的上下文中出现了一些伪代码形式的"emit".并在Node.js. 在Qt.但那是关于它的.
背景:我是(大多数)自学成才的网络程序员和系统管理员.我确定这个问题在compsci 101(或201?)中有所涉及,但我没有采用这个课程.
平台:
Darwin * -*s-MacBook-Pro.local 11.4.2 Darwin内核版本11.4.2:8月23日星期四16:25:48 PDT 2012; root:xnu-1699.32.7~1/RELEASE_X86_64 x86_64
Ruby:
ruby 2.0.0p0(2013-02-24修订版39474)[x86_64-darwin11.4.2](由rvm安装)
Qt:
qt:稳定4.8.4(瓶装),HEAD
代码:
require 'Qt'
class Foo < Qt::Object
signals :my_signal #also tried 'my_signal()'
slots 'my_slot()'
def initialize(parent = nil)
super(parent)
puts "connecting signal and slot"
Qt::Object.connect(self, SIGNAL('my_signal()'), self, SLOT('my_slot()'))
# also tried => connect(self, SIGNAL('my_signal()'), self, SLOT('my_slot()'))
end
def emit_my_signal
puts "sending signal"
emit my_signal
end
def my_slot
puts "received message from signal"
end
end
o = Foo.new
o.emit_my_signal
Run Code Online (Sandbox Code Playgroud)
输出: …
我想从Qt中的C++线程(std :: thread)发出信号.
我该怎么做?
我知道$ emit在DOM树上发送消息,$ broadcast发送消息.
如何在兄弟DOM元素之间发送消息 - 我该怎么做?
我想在新博客保存时发出事件
blog.post('save',function(blog){
this.emit('newBlog',blog)
})
Run Code Online (Sandbox Code Playgroud)
在我的项目的其他地方说app.js可以听这个事件
EventEmitter = require('events').EventEmitter;
emitter = new EventEmitter();
emitter.on('newBlog',function(blog){
console.log(blog);
})
Run Code Online (Sandbox Code Playgroud)
这该怎么做?
我正在尝试使用 TypeScript 学习 Vue 3 Composition API,特别是如何使用严格类型化的有效负载发出事件。
我在下面有一个例子,但我不确定这是否是正确的方法。所以我的问题是是否还有其他方法可以发出具有严格类型负载的事件?
我使用了这个包: https: //www.npmjs.com/package/vue-typed-emit并使其与下面的示例一起使用,其中我将布尔值从子组件传递到父组件:
子组件:
<script lang="ts">
import { defineComponent, ref, watch } from 'vue'
import { CompositionAPIEmit } from 'vue-typed-emit'
interface ShowNavValue {
showNavValue: boolean
}
interface ShowNavValueEmit {
emit: CompositionAPIEmit<ShowNavValue>
}
export default defineComponent({
name: 'Child',
emits: ['showNavValue'],
setup(_: boolean, { emit }: ShowNavValueEmit) {
let showNav = ref<boolean>(false)
watch(showNav, (val: boolean) => {
emit('showNavValue', val)
})
return {
showNav
}
}
})
</script>
Run Code Online (Sandbox Code Playgroud)
父组件
<template>
<div id="app">
<Child …Run Code Online (Sandbox Code Playgroud) 我试图了解什么是最好的GENERIC方法在父和子指令之间进行通信与隔离范围(它们可能是可重用的项目).
这意味着如果child指令需要以某种方式更新父指令(两者都有隔离的作用域),我应该传递一个回调函数:
例如:
.directive('filterReviewStepBox', function () {
return {
restrict: 'EA',
scop: {
//some data
},
template: '<div>text<reusable-dir></reusable-dir call-back="foo"></div>',
link: function (scope, elem, attrs) {
scope.foo = function () {
console.log('bar');
};
}
};
}).directive('reusableDir', function () {
return {
restrict: 'EA',
scope: {
callBack: '=callBack'
//other data
},
template: '<div>text<button type="button" ng-click="bar"></button></div>',
link: function (scope, elem, attrs) {
scope.bar = function () {
scope.callBack();
}
}
};
});
Run Code Online (Sandbox Code Playgroud)
或者我应该使用$ emit():
例如:
directive('filterReviewStepBox', function () {
return {
restrict: 'EA', …Run Code Online (Sandbox Code Playgroud) 这是我的代码如下:
search.component.html
<button (click)="addMe()">Click</button>
Run Code Online (Sandbox Code Playgroud)
search.component.ts
import { Component, Directive, OnInit, Input, Output, EventEmitter } from '@angular/core';
@Component({
selector: 'search-component',
templateUrl: './search.component.html'
})
export class SearchComponent {
@Output() userUpdated = new EventEmitter();
addMe() {
this.userUpdated.emit('my data to emit');
}
}
Run Code Online (Sandbox Code Playgroud)
profile.component.html
<search-component (userUpdated)="handleUserUpdated($event)"></search-component>
Run Code Online (Sandbox Code Playgroud)
profile.component.ts
handleUserUpdated(e) {
console.log('e', e);
}
Run Code Online (Sandbox Code Playgroud)