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://jsfiddle.net/50wL7mdz/30115/
์คํ๋ ๋ ๊ตฌ๋ฌธ์ *.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://jsfiddle.net/50wL7mdz/30115/์คํ๋ ๋ ๊ตฌ๋ฌธ์
*.vue
๊ตฌ์ฑ ์์๋ฅผ ์ฌ์ฉํ ๋ ๋ณํ๋์ง๋ง ๋ธ๋ผ์ฐ์ ๋ด ์ปดํ์ผ์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ ๋ณํ๋์ง ์์ต๋๋ค.