से उत्सर्जन घटना यह संभव घटक में निर्देश से एक कस्टम घटना फेंकना करने के लिए जो इस निर्देश जुड़ा हुआ है है।Vue.js - निर्देश
मैं इसे उदाहरण में वर्णित अनुसार काम करने की उम्मीद कर रहा था, लेकिन ऐसा नहीं है।
उदाहरण:
//Basic Directive
<script>
Vue.directive('foo', {
bind(el, binding, vnode) {
setTimeout(() => {
//vnode.context.$emit('bar'); <- this will trigger in parent
vnode.$emit('bar');
}, 3000);
}
});
</script>
//Basic Component
<template>
<button v-foo @bar="change">{{label}}</button>
</template>
<script>
export default{
data() {
return {
label: 'i dont work'
}
},
methods: {
change() {
this.label = 'I DO WORK!';
}
}
}
</script>
इस मामले पर कोई भी विचार? क्या मैं कुछ भूल रहा हूँ?
JSFiddle: https://jsfiddle.net/0aum3osq/4/
अद्यतन 1:
ठीक है, मैं पाया है कि अगर मैं निर्देश में (नवीनतम Vue संस्करणों में या fns()
) vnode.data.on.bar.fn();
फोन यह bar
ईवेंट हैंडलर ट्रिगर किया जाएगा।
अद्यतन 2:
अस्थायी समाधान:
/*temp. solution*/
var emit = (vnode, name, data) => {
var handlers = vnode.data.on;
if (handlers && handlers.hasOwnProperty(name)) {
var handler = handlers[name];
var fn = handler.fns || handler.fn;
if (typeof fn === 'function') {
fn(data);
}
}
}
//Basic Directive
<script>
Vue.directive('foo', {
bind(el, binding, vnode) {
setTimeout(() => {
emit(vnode, 'bar');
}, 3000);
}
});
</script>
बढ़िया काम करता है! आपके एमिट फ़ंक्शन कॉल में एंडिंग ब्रैकेट गुम है। मैंने संपादित करने की कोशिश की, लेकिन एसओ कहता है कि मुझे 6 अक्षरों को संपादित करना होगा। –
'vnode.context। $ Emit()' [email protected] के तहत इस उदाहरण में काम नहीं कर रहा है, इसे कैसे ठीक करें? लेकिन उत्सर्जन समारोह अभी भी अच्छी तरह से काम करता है। –
मेरे अनुभव में आप केवल एक घटना भेज दिए जाने के बाद 'vnode.context। $ Emit (' name ')' को कॉल कर सकते हैं ... 'element.addEvenetListener ('क्लिक करें',() => { vnode.context $ emit ('हैंडलक्लिक');}); ' काम करता है! लेकिन एक सादा 'vnode.context कर रहा है। $ Emit ('handleClick')' किसी इवेंट ट्रिगर के बाहर वास्तव में उत्सर्जन को सही ढंग से कॉल नहीं करता है, इस प्रकार आप इसे सुन नहीं सकते हैं। मैं गलत हो सकता था, लेकिन यह वही है जो मैंने अभी [email protected] में अनुभव किया है। – djowinz