2.2.6
https://jsfiddle.net/psycketom/50wL7mdz/29927/
$emit('event', first, second, arbitrary)
。@event="listener($event)"
介してイベントをリッスンします。配列またはその他の手段としての完全なイベントペイロード。
最初の値のみが渡されます。
v-for
を使用してコンポーネントのリストを作成し、イベントをリッスンしてこれに遭遇し、 index
パラメーターをリスナーに渡す必要がありました: @event="listener(index, $event)
。
たぶん私のユースケースは別の方法で解決されることを意図しているのかもしれません(バインドされたデータ属性?!)、もしそうなら、私はいくつかのガイダンスを気にしません。
arguments
: https :
*.vue
コンポーネントを使用する場合、スプレッド構文はトランスパイルされますが、ブラウザー内コンパイルを使用する場合はトランスパイルされないことに注意してください。
...arguments
まだ人々のために働いていますか? @myevent="$emit('myevent', ...arguments)"
を実行して再発行し、イベントを実行すると、最新のvue-template-compilerとvueを使用してコンソールTypeError: "vm is undefined"
エラーが発生します。
これは、エラーの原因である私のトランスパイルされたコードの一部です
on: {
myevent: function($event) {
var i = arguments.length,
argsArray = Array(i)
while (i--) argsArray[i] = arguments[i]
return _vm.$emit.apply(
void 0,
["myevent"].concat(argsArray)
)
}
}
そしてこれは、5行目のvm._events[lowerCaseEvent]
TypeErrorを実際にスローするVueコードの一部です。 上記のvoid 0
がundefined
を以下のvm
の値に設定しているためだと思います。 問題がどこから来ているのか考えていますか?
Vue.prototype.$emit = function (event) {
var vm = this;
if (process.env.NODE_ENV !== 'production') {
var lowerCaseEvent = event.toLowerCase();
if (lowerCaseEvent !== event && vm._events[lowerCaseEvent]) {
tip(
"Event \"" + lowerCaseEvent + "\" is emitted in component " +
(formatComponentName(vm)) + " but the handler is registered for \"" + event + "\". " +
"Note that HTML attributes are case-insensitive and you cannot use " +
"v-on to listen to camelCase events when using in-DOM templates. " +
"You should probably use \"" + (hyphenate(event)) + "\" instead of \"" + event + "\"."
);
}
}
var cbs = vm._events[event];
if (cbs) {
cbs = cbs.length > 1 ? toArray(cbs) : cbs;
var args = toArray(arguments, 1);
var info = "event handler for \"" + event + "\"";
for (var i = 0, l = cbs.length; i < l; i++) {
invokeWithErrorHandling(cbs[i], vm, args, vm, info);
}
}
return vm
};
使用しようとすると@ yyx990803私は、引数... @rightawayと同じエラーを見ている-使用するいくつかの新しい魔法があるか、これは確かに回帰ですか?
最も参考になるコメント
arguments
: https :*.vue
コンポーネントを使用する場合、スプレッド構文はトランスパイルされますが、ブラウザー内コンパイルを使用する場合はトランスパイルされないことに注意してください。