Vue: μ—¬λŸ¬ 동적 슬둯 이름을 μ‚¬μš©ν•˜λŠ” λ™μ•ˆ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€ (잘λͺ»λœ 동적 인수 ν‘œν˜„μ‹).

에 λ§Œλ“  2019λ…„ 03μ›” 27일  Β·  7μ½”λ©˜νŠΈ  Β·  좜처: vuejs/vue

버전

2.6.10

볡제 링크

https://github.com/tbutcaru/v-issue-multiple-dynamic-slot-names

μž¬ν˜„ 단계

  1. 이 μ €μž₯μ†Œ 볡제 : https://github.com/tbutcaru/v-issue-multiple-dynamic-slot-names
  2. μ‹€ν–‰ : npm install
  3. μ‹€ν–‰ : npm run serve

무엇을 κΈ°λŒ€ν•©λ‹ˆκΉŒ?

μ—¬λŸ¬ 동적 슬둯 이름이 μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•΄μ•Όν•©λ‹ˆλ‹€.

μ‹€μ œλ‘œ 무슨 일이 μΌμ–΄λ‚˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€.

Invalid dynamic argument expression: attribute names cannot contain spaces, quotes, <, >, / or =.#[headerslot]>Header slot</template>
    Default slot
    <template #[footerslot]

동적 슬둯 이름 쀑 ν•˜λ‚˜κ°€ μ •μ μœΌλ‘œ λ§Œλ“€μ–΄μ§€λ©΄ (무엇이든 상관 μ—†μŒ) μ‘μš© ν”„λ‘œκ·Έλž¨μ΄ μž‘λ™ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‚΄ 쑰사
  • 파일 : node_modules/vue-template-compiler/build.js
  • 쀄 : 2563 ( attrs.forEach(function (attr) { )은 λ‹€μŒ κ²½κ³ λ₯Ό μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.
warn$1('--------------->> ' +  attr.name);
쑰사 κ²°κ³Ό :
  1. 동적 슬둯 이름이 ν•˜λ‚˜ 뿐인 μž‘μ—… μ‹œλ‚˜λ¦¬μ˜€ : ν•΄λ‹Ή 동적 슬둯 μ΄λ¦„μ˜ 값은 #[headerslot]
  2. 두 개의 동적 슬둯 μ΄λ¦„μ΄μžˆλŠ” 였λ₯˜ μ‹œλ‚˜λ¦¬μ˜€ : 첫 번째 동적 슬둯 μ΄λ¦„μ˜ 값은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.
#[headerslot]>Header slot</template>
    Default slot
    <template #[footerslot]

λ”°λΌμ„œ μ»΄νŒŒμΌλŸ¬λŠ” 동적 슬둯 이름이 μ—¬λŸ¬ 개인 경우 속성 만 μΆ”μΆœν•˜λŠ” 방법을 λͺ¨λ₯΄λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

bug has PR

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ—¬λŸ¬ 번 μ‹œλ„ν•œ 끝에 닀쀑 동적 슬둯이 μž‘λ™ν•˜λ„λ‘ν•˜λŠ” 방법을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. 동적 슬둯 ν…œν”Œλ¦Ώμ˜ 루트 μš”μ†Œμ— ν‚€λ₯Ό μΆ”κ°€ν•˜λ©΄ μž‘λ™ν•©λ‹ˆλ‹€.

이것은 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ : μ—¬κΈ°μ—μ„œ μž¬ν˜„

   <template #[slot1]>
       <p>slot test</p>
   </template>
   <template #[slot2]>
       <p>slot test2</p>
    </template>

// got "Invalid dynamic argument expression: attribute names cannot contain spaces, quotes, <, >, / or ="

이 μž‘ν’ˆ : μ—¬κΈ°μ—μ„œ μž¬ν˜„

   <template #[slot1]>
       <p key="1">slot test</p>
   </template>
   <template #[slot2]>
       <p key="2">slot test2</p>
    </template>

// work fine

μž‘λ™ν•˜λ„λ‘ ν‚€λ₯Ό μΆ”κ°€ν•΄μ•Όν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? λ‚˜λŠ” λ­”κ°€λ₯Ό 놓쳀닀.

λͺ¨λ“  7 λŒ“κΈ€

μ†κΈ°λŠ” μΈμˆ˜κ°€ 제곡된 κ²½μš°μ—λ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ„ μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.
<template v-slot:[dynamicSlotName]> ... </template>

μ†κΈ°λŠ” μΈμˆ˜κ°€ 제곡된 κ²½μš°μ—λ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒμ„ μ‚¬μš©ν•˜μ‹­μ‹œμ˜€.
<template v-slot:[dynamicSlotName]> ... </template>

λ‚˜λŠ” 문제λ₯Ό λ§Œλ“€κΈ° 전에 그것을 μ‹œλ„ν–ˆμœΌλ©° κ²°κ³ΌλŠ” λ™μΌν•©λ‹ˆλ‹€ 😞

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„!

이것에 λŒ€ν•΄ μƒˆλ‘œμš΄ 것은 λ¬΄μ—‡μž…λ‹ˆκΉŒ? 2.6.11μ—μ„œ μ—¬μ „νžˆ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ—¬λŸ¬ 번 μ‹œλ„ν•œ 끝에 닀쀑 동적 슬둯이 μž‘λ™ν•˜λ„λ‘ν•˜λŠ” 방법을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. 동적 슬둯 ν…œν”Œλ¦Ώμ˜ 루트 μš”μ†Œμ— ν‚€λ₯Ό μΆ”κ°€ν•˜λ©΄ μž‘λ™ν•©λ‹ˆλ‹€.

이것은 μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ : μ—¬κΈ°μ—μ„œ μž¬ν˜„

   <template #[slot1]>
       <p>slot test</p>
   </template>
   <template #[slot2]>
       <p>slot test2</p>
    </template>

// got "Invalid dynamic argument expression: attribute names cannot contain spaces, quotes, <, >, / or ="

이 μž‘ν’ˆ : μ—¬κΈ°μ—μ„œ μž¬ν˜„

   <template #[slot1]>
       <p key="1">slot test</p>
   </template>
   <template #[slot2]>
       <p key="2">slot test2</p>
    </template>

// work fine

μž‘λ™ν•˜λ„λ‘ ν‚€λ₯Ό μΆ”κ°€ν•΄μ•Όν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? λ‚˜λŠ” λ­”κ°€λ₯Ό 놓쳀닀.

@ davis90 의 μ†”λ£¨μ…˜μ΄ μ €μ—κ²Œ

vueμ—μ„œ 였λ₯˜κ°€ 잘λͺ»λœ μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? μ†”λ£¨μ…˜μ΄ μž‘λ™ν–ˆμ§€λ§Œ κ°μ‚¬ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰