ìŽê²ì https://github.com/vuejs/vue/issues/7740#issuecomment -371309357ì íì ì¡°ì¹ì ëë€.
íì¬ ë²ì ì¬ë¡¯ ì¬ì© 묞ì :
<template slot-scope>
ì¬ì©íë ê²œì° ììží ì 볎 íìslot-scope
륌 ì¬ì©í©ëë€.êµ¬ì± ììììë§ ì¬ì©í ì ìë ìë¡ìŽ v-scope
ì§ì묞ì ëì
íììì€.
<comp v-scope="scope">
{{ scope.msg }}
</comp>
ìŽ ê°ì ìë í slot-scope
ìí Ʞ볞 ë²ì ì¬ë¡¯ <comp>
(곌 <comp>
ë²ì ê°ì ì ê³µíë€). ë°ëŒì ë€ì곌 ê°ì ë¶íŽ ìì
ìë ì ì©ë©ëë€.
<comp v-scope="{ msg }">
{{ msg }}
</comp>
ëë íìŽ ëŽê° https://github.com/vuejs/vue/issues/7740#issuecomment -371309357 Slackìì ì ìí ê²ì ê°ëµíê² ë Œìíë€ê³ ìê°íì§ë§ ë ìŽì ì±í êž°ë¡ì ì°Ÿì ì ììµëë€. ë€ìì ì ì§ì묞ì ëí ìŽì ì ëë€.
slot-scope
slot
ê° ìì±ìŽê³ ì¬ë¡¯ êŽë š ìì±ì ìŒêŽëê² ì ì§íꞰ륌 ìíêž° ë묞ì v-
ì ëì¬ë¡ ììíë ìì±) ëì í¹ì ìì±ìŒë¡ ëì
ëììµëë€. . slot
ë Shadow DOM íì€ìì ì€ì ì¬ë¡¯ ì¬ì©ëì 믞ë¬ë§íë ì¬ì©ë²ì ìíêž° ë묞ì ì°šë¡ë¡ ë¹ì§ìì ìì±ìŒë¡ ëì
ëììµëë€. ì°ëŠ¬ë íì€ìì ê°ë
ì ìŒë¡ ëìŒí ê²ìŽ ìì ë ì첎 ë³ë ¬ v-slot
륌 ì¬ì©íì§ ìë ê²ìŽ ê°ì¥ ì¢ë€ê³ ìê°íìµëë€.
ìë slot-scope
ë ì¶ì 컚í
ìŽë ìí ì íë <template>
ììììë§ ì¬ì©í ì ìëë¡ ì€ê³ëììµëë€. ê·žë¬ë ê·žê²ì ì¥í©íìµëë€. ê·žëì ì°ëŠ¬ë <template>
ëí ììŽ ì¬ë¡¯ ìììì ì§ì ì¬ì©í ì ìë êž°ë¥ì ëì
íìµëë€. ê·žë¬ë,ìŽ ëí ë¶ê°ë¥íì¬ íì© í ì slot-scope
귞늌곌 ê°ìŽìŽ 몚ížíšìŒë¡ ìŽìŽì§ ê²ìŽêž° ë묞ì, ì§ì êµ¬ì± ìì ì첎ì ì¬êž° .
slot-scope
ìì ì ëë í¹ì ì ëì¬ë¥Œ ì¶ê°íì¬ ì¬ë¡¯ ìœí
ìž ê° êž°ë³ž ë²ì ì¬ë¡¯ìŒë¡ ì²ëŠ¬ëìŽìŒ íì§ë§ ìì ìë $
ì ê°ì ì ëì¬ê° 몚ë ì²ëŠ¬ëì§ ìììŒ íšì íìíêž° ìíŽ êµ¬ì±ìììì ì§ì ì¬ì©í ì ìëë¡ íë ê²ì ëíŽ ìê°íìµëë€
ì죌 ì€ë«ëì ì°ëŠ¬ë ë ë§ì ì§ì묞ì ì¶ê°íë ê²ì íŒíìµëë€. í í늿 구묞ì ìŒë¶ë ê°ë¥í í ìì ì ìŒë¡ ì ì§íê³ ì¶ì ê²ìŽê³ ìŒë¶ë íµì¬ ì§ì묞ì ìµìíìŒë¡ ì ì§íê³ ìì ë§ ìííꞰ륌 ìíë€ë ê²ì ëë€. ì ì ê° ì ì ëëìì ìœê² í ì ìë ìŒ. ê·žë¬ë ìŽ ê²œì° ë²ìê° ì§ì ë ì¬ë¡¯ ì¬ì©ìŽ 충ë¶í ì€ìíë©° ì¬ì©ì íšì¬ ë ìëëœê² ë§ëë ìë¡ìŽ ì§ì¹šìŽ ì ë¹íë ì ìë€ê³ ìê°í©ëë€.
v-scope
íì©íë ííìì ëë¶ë¶ì ë€ë¥ž ì§ì묞곌 ë€ëŠ
ëë€. ìì ë³ì ìŽëŠ(íŽì²ŽìŒ ìë ìì)ìŽ íìíì§ë§ ì°ì ììê° ìë ê²ì ìëëë€. v-for
ì ë³ì¹ ë¶ë¶ì²ëŒ ìëí©ëë€. v-scope
ë ëŽë¶ ë²ìì ëí ìì ë³ì륌 ìì±íë 구조ì ì§ì묞ìŒë¡ v-for
ì ê°ì ì§ìì ìí©ëë€.
ì¬ì©ììê² v-scope
ëŒë ì¬ì©ì ì§ì ì§ìë¬žìŽ ìê³ êµ¬ì± ìììì ì¬ì©ëë ê²œì° ì¬ì©ì ìœëê° ììë©ëë€.
v2ì ì¬ì©ì ì§ì ì§ì묞ì ì£Œë¡ ì§ì ì ìž DOM ì¡°ìì ì€ì ì ëê³ ìêž° ë묞ì êµ¬ì± ììì ì¬ì©ëë ì¬ì©ì ì§ì ì§ì묞ì 볎ë ê²ì ìëì ìŒë¡ ë묌며 v-scope
ëŒê³ íë 겜ì°ìë ëì± ê·žë ìµëë€. ë°ëŒì ìí¥ì ìµìíëìŽìŒ í©ëë€.
ì€ì ë¡ ë°ìíë 겜ì°ìë 컀ì€í ëë í°ëžì ìŽëŠì ë°êŸžë ê²ë§ìŒë¡ ê°ëšíê² ì²ëŠ¬í ì ììµëë€.
ì¢ì 볎ìžë€. ì¬ë¡¯ ìŽëŠì ì ê³µíêž° ìíŽ ìžì륌 ì¬ì©íë ê²ì ëíŽ ìê°íê³ ììì§ë§ ìŽë ê² íë©Ž ëìŒí êµ¬ì± ìììì ì¬ë¬ ì§ì묞 v ë²ì륌 ì¬ì©í ì ììŒë¯ë¡ êµ¬ì± ììì ì ê³µë ìœí ìž ë¥Œ ì¬ì¬ì©í ì ììµëë€. ì ì©íì§ ëë 묞ì 륌 ìŒìŒí¬ ì ìëì§ íì€íì§ ììµëë€.
Overral, ìŽê²ì ìê°ìŽ ì§ëšì ë°ëŒ ë ë§ìŽ ì¬ì©ëë ë ëëŠ¬ì€ êµ¬ì± ììì API ì¬ì©ì í¥ììí¬ ê²ì ëë€ ð
ëŽê° ì¬ë°ë¥Žê² ìŽíŽíë€ë©Ž v-scope
ë íëì ì¬ì© ì¬ë¡ë§ ì ê³µí©ëë€. ì°ë ëì :
<foo>
<template slot-scope="{ item }">{{ item.id }}</template>
</foo>
ì°ëŠ¬ë ìž ììë€:
<foo v-scope="{ item }">{{ item.id }}</foo>
ìŽ ê²œì° ìììŽ ìë¹í ì€ìŽë€ìì§ë§ ì ìŒí 겜ì°ìž ê² ê°ìµëë€. ì ì§ì묞ì ëì
íë ê²ì ìŒì¢
ì 곌ì ì²ëŠ¬ì²ëŒ ë껎ì§ëë€(êµ¬ì± ììììë§ ìëíê³ ìëì <slot>
ë
ŒëŠ¬ì ìì¡Žíêž° ë묞ì v-for
ììë ë€ë¥ž ì§ì묞곌 ìì í ë€ë¥Žê² ìëíš). ë ë€ë¥ž 묞ì ë ìŽ repo ìì v-scope
륌 ê²ì í ë í
í늿 íì ížëŠ¬ì ë°ìŽí° ë²ì륌 ì€ìŽë ê²ì ëíŽ ë
Œìíë 겜ì°ê° ë ë²ë¿ìŽëŒë ê²ì
ëë€(https://github.com/vuejs/vue/issues/5269 #issuecomment-288912328, https://github.com/vuejs/vue/issues/6913), JavaScriptìì with
ìë ë°©ì곌 ê°ìµëë€.
ì¢ìì. ëìê² ëšì í ê°ì§ ì§ë¬žì ëª
ëª
ë ì¬ë¡¯ì ì²ëŠ¬íë ë°©ë²ì
ëë€. ëª
ëª
ë ì¬ë¡¯ìŽ ëìŒí ì§ì묞ì ì¬ì©íëë¡ íì©íë €ë©Ž <template>
ììë íì©íŽìŒ í©ëë€.
<comp v-scope="scope">
{{ scope.msg }} <!-- default slot, inheriting from the scope from above -->
<template slot="someName" v-scope="otherScope">
<p>{{ otherScope }}</p>
<div> whatever</div>
</template>
</comp>
ìŽ êž°í륌 ì¬ì©íì¬ sot-scope
륌 ë ìŽì ì¬ì©íì§ ìê³ Vue 3ìì ì ê±°íì¬ v-scope
ë첎í ì ììµëë€.
ê°ì ê²ì ëíŽ ë ê°ì§ ë€ë¥ž ê°ë
( v-scope
ì§ì묞 ë° slot-scope
ìì±)ìŒë¡ ëëì§ ìììŒ íë€ê³ ìê°í©ëë€.
Sidenote: ìŽì , ì¬ëë€ì ììì ê³ìžµ 구조ìì ìžìì ì»ì ì ììµëë€.
ëª
ëª
ë ì¬ë¡¯ìì otherScope
ë° scope
ì ì¡ìžì€í ì ììµëë€. ëšì ìŽ ë ì ììµëë€.
ìŽëŠì ëí @LinusBorg ìžìë v-scope:slotName
ìíí ì ììµëë€. êµ¬ì± ììììë§ ìŽê²ì íì©íë ìì ì @Justineoê° ë§í ê²ì ë첎íë ê²ì
ëë€(https://github.com/vuejs/vue/issues/9180#issuecomment-446168296).
Sidenote: ìŽì , ì¬ëë€ì ììì ê³ìžµ 구조ìì ìžìì ì»ì ì ììµëë€.
ëª ëª ë ì¬ë¡¯ì otherScope ë° ë²ìì ì¡ìžì€í ì ììµëë€. ëšì ìŽ ë ì ììµëë€.
ê·žê² íšê³Œê° ììŽ, ê·žë ì§? ð€ ëë ì€ì²©ë ì¬ë¡¯ ë²ì륌 ê°ì§ê³ ìë€ê³ íì í©ëë€.
ê·žê² íšê³Œê° ììŽ, ê·žë ì§? ð€ ëë ì€ì²©ë ì¬ë¡¯ ë²ì륌 ê°ì§ê³ ìë€ê³ íì í©ëë€.
ëë ê·žê²ë€ì ì€ì²©íì§ ììì§ë§ íì ì¬ë¡¯ì
ëë€. ëŽê° íšê» Ʞ볞 ì¬ë¡¯ì ë²ì륌 ì ì v-scope
êµ¬ì± ììì, ê·žëŠ¬ê³ (íì ì¬ë¡¯ì
ëë€) ì§ì ë ì¬ë¡¯ìŽìë <template slot="someName">
볎ë€? íŒëì€ëœë€ì^^
@LinusBorg ì¬ì©ë²ìŽ íŒëì€ë¬ìž ê² ê°ìµëë€. ëë ê°ë ì ìŒë¡ ë€ì곌 ê°ë€ê³ ìê°íë€.
v-scope
ê° êµ¬ì± ììì ì§ì ì¬ì©ëë©Ž Ʞ볞 ì¬ë¡¯ë§ ì¬ì©íê³ ììì ì믞í©ëë€.slot
+ slot-scope
륌 ì¬ì©íŽìŒ í©ëë€.v-scope
ì slot-scope
륌 몚ë ì¬ì©íë ê²ìŽ ìŒêŽì±ìŽ ìê³ íŒëì€ë¬ìž ì ìë€ë ì ì ëìí©ëë€. í¹í íì¬ ëììžì ëë¬í ë°©ë²ì 몚륎ë ì ê· ì¬ì©ììê²ë ëì± ê·žë ìµëë€.
ì¢ í©íë €ê³ íë©Ž ë€ì곌 ê°ì ì룚ì ì ìíë ê²ì²ëŒ ë€ëŠœëë€.
ìŽ ëªšë 묞ì 륌 íŽê²°í ì ìë ì룚ì
ìŽ ìì ì ììµëë€! ð€ $event
for v-on
ì¬ì©íë©Ž ëª
ëª
ë ìžìê° ìë ììì íšì ëŽìì ì€íëë ííìì ì ê³µíë ì ë¡ê° ììµëë€. ì¬ëë€ì ê·ž ížëŠ¬íšì ìŠêž°ë ê² ê°ìŒë©° ê·žë¡ ìží íŒëì 귞늬 í¬ì§ ììŒë¯ë¡ ë²ìê° ì§ì ë ì¬ë¡¯ì ê²œì° íŽë¹ ì륌 ë°ëŒìŒ í©ëë€.
v-scope
륌 ì¬ì©íë ëì ì¬ë¡¯ ë²ì륌 $slot
ë¡ ì¬ì©í ì ììµëë€. ì륌 ë€ìŽ:
<TodoList :todos="todos">
{{ $slot.todo.text }}
<template slot="metaBar">
You have {{ $slot.totals.incomplete }} todos left.
</template>
</TodoList>
컚í ì€ížì ê²œì° íì í í늿ì ë€ì곌 ê°ì ì ììµëë€.
<ul>
<li v-for="todo in todos">
<slot :todo="todo" />
</li>
</ul>
<div>
<slot name="metaBar" v-bind="itemsStats" />
</div>
ì¬ë¡¯ìŽ ì€ì²©ëë©Ž $slot
ê°ì²Žë ì¬ë¡¯ ë°ìŽí°ë¥Œ ë³í©íê³ ê°ì¥ ì쪜ì ìë ì¬ë¡¯ìŽ ì°ì ìì륌 묎ìí©ëë€. ì륌 ë€ìŽ:
<Outer>
<Middle>
<Inner>
{{ $slot }}
</Inner>
</Middle>
</Outer>
ë³í©ì ë€ì곌 ê°ìŽ ë³ŽìŒ ì ììµëë€.
$slot = {
...outerSlotData,
...middleSlotData,
...innerSlotData
}
ë€ìì€íìŽì€ 겹칚ì ì²ëŠ¬íë ë°©ë²ì ëíŽ ê±±ì /ê¶êží ì ììŒë©° 99.9%ì 겜ì°ìë ì€ì ë¡ ë¬žì ê° ëì§ ìì ê²ìŽëŒê³ ìê°í©ëë€. ì륌 ë€ìŽ:
<UserData id="chrisvfritz">
My email is {{ $slot.user.email }}, but you can reach Sarah at
<UserData id="sdras">
{{ $slot.user.email }}
</UserData>.
</UserData>
ìì ììì $slot.user
ë ì€ì²© ë²ììë ë¶êµ¬íê³ íì ì¬ë°ë¥ž ê°ì ê°ìµëë€. ê·žë¬ë ë€ì곌 ê°ìŽ ë ìì±ì ëìì ì¡ìžì€íŽìŒ íë 겜ì°ê° ììµëë€.
<UserData id="chrisvfritz">
<template slot-scope="me">
<UserData id="sdras">
<template slot-scope="sarah">
<CollaborationPageLink :user-ids="[me.user.id, sarah.user.id]">
View your collaboration history
</CollaborationPageLink>
</template>
</UserData>
</template>
</UserData>
ìŽë¬í ë묞 겜ì°ì ê²œì° ì¬ì©ìë íì¬ ëì곌 íšê» slot-scope
륌 íì¶ì© íŽì¹ë¡ ì¬ì©í ì ììµëë€. íì§ë§ v-scope
ë ì¬ì í íìíì§ ììµëë€. ëŽê° ì¬ë°ë¥Žê² ìŽíŽíë€ë©Ž $slot
ê°ì²Žê° ëìŒí 묞ì 륌 ìŒìŒí€ì§ ìê³ ìŽë¯ž ë¬ì±íì ê°ì¥ ìŒë°ì ìž ì¬ì© ì¬ë¡ë¥Œ ëšìííë ê²ìŽ 목ì ìŽêž° ë묞ì
ëë€.
ì¬ì©ìê° ì¬ë¡¯ìì ì ê³µíë ë°ìŽí°ì ì¡ìžì€íë €ê³ í ë ì ìŒí ìì©êµ¬ë $slot
ì
ëë€. ìì±ìŽ ì ìë ìì¹ë¥Œ íìžíêž° ìíŽ êµ¬ì± ìì륌 ê²ìí íì ììŽ ë°ìŽí°ê° ì¬ë¡¯ìì ìë€ë ê²ìŽ ìŠì ëª
ë°±í©ëë€.
ìŽë€ ë°ìŽí°ì ì¡ìžì€í ì ìëì§ ìêž° ìíŽ ì¬ì©ìë ìœí
ìž ê° ë ëë§ë ì¬ë¡¯ë§ ìê°íë©Ž ë©ëë€ . v-scope
íë©Ž v-for
ì²ëŒ ìëíë€ê³ ê°ì íë ì¬ëë€ìê² ë§ì íŒëìŽ ìì ê²ìŽëŒê³ ìê°í©ëë€. ìëíë©Ž ìŽê²ìŽ ë²ìê° ì§ì ë 컚í
ì€íž ìì±ì ì ìíë ì ìŒí ë€ë¥ž ì§ì묞ìŽêž° ë묞ì
ëë€.
ì¬ì©ìë ë²ìê° ì§ì ë ì¬ë¡¯ì ì¬ì©íêž° ìíŽ êµ¬ì¡°íì ìµìíê³ ížìí íìê° ììŒë¯ë¡ íìµ ê³¡ì ìŽ ì€ìŽëëë€.
ìŽë€ 겜ì°ìë í¹í 몚ë ìí륌 ì ê³µíë ë§ì ì€ì²©ë ì¬ë¡¯ìŽ ìë ê²œì° ìŒë¶ ìíê° _ìŽë êµ¬ì± ìììì ìëì§ ëª
ííì§ ììŒë©° ì¬ì©ìë slot-scope
ë€ì ëë¬íŽìŒ í©ëë€. ìŽê²ì ëšì ì²ëŒ ë€ëŠŽ ì ìì§ë§ ì€ì²© ë²ì ì¬ë¡¯ì 볌 ë ê±°ì íì ìí ì ê³µì íšíŽì ëí ê²ì
ëë€. ìŽë ë°íšíŽìŽëŒê³ ê°íê² ëëëë€. ì¬êž° ëŽ ì¶ë¡ ìŽ ììµëë€. ë°ëŒì ë§ì ì€ì²© ë²ì ì¬ë¡¯ìŽ ë ë§ì ìì©êµ¬ë¥Œ íìë¡ íë€ë ì¬ì€ì ì€ì ë¡ ìí° íšíŽì ì¬ì©ì ì€ìŒ ì ììµëë€ .
ëë¶ë¶ì Vue ê°ë°ìë ê°ì²ŽìŒ ë¿ìž $slot
ë§ êž°ìµíë©Ž ëë¯ë¡ API ë
žì¶ ìììŽ í¬ê² ì€ìŽëëë€ .
$
-prefixed ìì±ì ì¬ì©íì¬ $slot
ê° Vueìì ëª
íí íë ë°©ììŒë¡ ì¹ êµ¬ì± ìì ì¬ë¡¯ API륌 구ì¶íê³ ììµëë€.
íì¬ ëŒìŽëžë¬ëŠ¬ë ì¢
ì¢
ê°ì ê²ì í <slot v-bind="user" />
ê·žëì ìì ì ì¬ì©ìê°ìë ëª êžì ì ì¥í ì slot-scope="user"
ëì slot-scope="{ user }
. ìžë» 볎Ʞì ê³ êžì€ë¬ì 볎ìŽì§ë§, ìí°íšíŽìŒë¡ 겜ííê² ëììµëë€. êµ¬ì± ììê° ì¬ì©ì ìŽìžì ë°ìŽí°ë¥Œ ë
žì¶íë €ê³ í ë 묞ì ê° ë°ìí©ëë€. ê·žë° ë€ì ë ê°ì§ ì íìŽ ììµëë€. API륌 í¬ê² ë³ê²œíê±°ë ìŽ ì ìì±ì user
ê°ì²Žì ê°ì ì ì©íë ê²ì
ëë€. ì¬ì©ìì êŽë šìŽ ê±°ì ììì§ëŒë ë§ì
ëë€. ìŽë 쪜ë íë¥í ìµì
ìŽ ìëëë€. ë€íí $slot
ë êµ¬ì± ìì륌 ë 믞ë ì§í¥ì ìŒë¡ ë§ë€ë €ë ì í¹ì ì ê±°í©ëë€. $slot
ê° $slot.user
ë³Žë€ ì¬ì í 짧ì§ë§ ì¬ì©ì륌 $slot
ìŒë¡ ë³ì¹ì ì§ì íì¬ ì€ìí 컚í
ì€ížë¥Œ ìêž° ë묞ì
ëë€
slot-scope
ëë¬í ì ììŒë¯ë¡ í° ë¬žì ë ìëëŒê³ ìê°í©ëë€. ëí, ìì ìžêžíë¯ìŽ ì¬ì©ìê° ì²ìì ìŽ ë¬žì ê° ìë ê²œì° ìí ê³µêžì êµ¬ì± ììë¡ ìì ì ìê³ ìì ê°ë¥ì±ìŽ ë§€ì° ëë€ê³ ìê°í©ëë€.$
-prefixed ìì±ì ì 첎 Vue ìžì€íŽì€ ëŽìì ìŒêŽëìŽìŒ íë€ê³ ìê°í©ëë€. ì묵ì ìŒë¡ ê° ì¬ë¡¯ì $slot
륌 ìœì
íì¬ íŒëì ìŒìŒí¬ì§ íì í ì ììŒë©° ì€ì ë¡ ìŽë¬í ì¬ë¡¯ ë²ì ëŽì ë¡ì»¬ ìžì륌 ëíë
ëë€. ëŽ êŽì°°ì ë°ë¥Žë©Ž $
-prefixed ìì±ì 몚ë Vue ìžì€íŽì€ìì ì¬ì©í ì ìë ê²ì ì믞íë¯ë¡ ìëª
죌Ʞ íí¬, ë©ìë ë° ë ëë§ êž°ë¥ì í¬íšíì¬ ëªšë ëŽë¶ìì ì¬ì©í ì ììµëë€. ìŽ í¹ë³í $slot
륌 ì¶ê°íë©Ž ìŽ ê·ì¹ìŽ 깚ì§ëë€.
@chrisvfritz ìŽê²ì í¥ë¯žë¡ìŽ ì ììŽì§ë§ ìŒë° ì¬ë¡¯ê³Œ ââë²ìê° ì§ì ë ì¬ë¡¯ìŽ íµí©ëë ë°©ìì ìì¡Ží©ëë€(ë°ëŒì v3ìì ê³ ë €í ì ìë ê²). ìŽê²ì ê°ì¥ í° ë¬žì ë ì¬ë¡¯ ìœí
ìž ê° ìì êµ¬ì± ììì $slots
ëë $scopedSlots
ìì ì¬ì©í ì ììŽìŒ íë€ë ê²ì
ëë€. ì ìŒí íížë slot-scope
(ì¬ë¡¯ 룚ížìë§ ìì ì ìì)ë§íŒ ëª
ìì ìŽì§ ìì ííì(ížëŠ¬ ìëì ì묎 ê³³ìë ìì ì ìì)ì ìŽëê°ì $slot
ìë€ë ê²ì
ëë€. êž°ì ì ìŒë¡ 컎íìŒë¬ìì ìŽë¥Œ ê°ì§í ì ìì§ë§ ì¬ì©ìê° í
í늿ìì $slot
륌 ì¬ì©íêž° ììí ëë§ë€ ì¬ì©ì ì¬ë¡¯ìŽ $slots
ìì $scopedSlots
$slot
ë¡ ìŽëí©ëë€...
ìŽê²ìŽ JSX ì¬ì©ììê² í° ìí¥ì 믞칩ëê¹?
@donnysim ìëì, ìŽê²ì ìŽë€ ììŒë¡ë JSXì ìí¥ì 믞ì¹ì§ ììµëë€.
$
-prefixed ìì±ì ì 첎 Vue ìžì€íŽì€ ëŽìì ìŒêŽëìŽìŒ íë€ê³ ìê°í©ëë€. ì묵ì ìŒë¡ ê° ì¬ë¡¯ì$slot
륌 ìœì íì¬ íŒëì ìŒìŒí¬ì§ íì í ì ììŒë©° ì€ì ë¡ ìŽë¬í ì¬ë¡¯ ë²ì ëŽì ë¡ì»¬ ìžì륌 ëíë ëë€.
@Justineo ì ë ì²ììë ê°ì ìê°ì íì§ë§ $event
ëíŽ ìŽ ìì
ì ìííê³ ì묎ë ë¶ííì§ ìë ê² ê°ìŒë¯ë¡ ìŽë¯ž ì ë¡ê° ììŒë©° ì¬ì©ìê° ìŒë°ì ìŒë¡ íŒëíì§ ìê³ ì€ì ë¡ ížëŠ¬íšì ìŠêž°ê³ ìë€ë ìŠê±°ê° ììµëë€.
ìŽê²ì ê°ì¥ í° ë¬žì ë ì¬ë¡¯ ìœí ìž ë¥Œ ìì êµ¬ì± ììì
$slots
ëë$scopedSlots
ìì ì¬ì©í ì ììŽìŒ íë€ë ê²ì ëë€.
@yyx990803 ì¢ì ì§ë¬žì
ëë€! íšê³Œê° ìì ì ìë€ë ìê°ìŽ ììµëë€. 몚íží 겜ì°( $slot
ì¬ì©íë ì€ì²©ë ì¬ë¡¯) 몚ë ì¬ë¡¯ì ë²ìê° ì§ì ë ì¬ë¡¯ìŒë¡ 컎íìŒíê³ $slots
ìëìì 몚ë $scopedSlots
$slots
륌 getterë¡ ì¬ì©í ì ìëë¡ íë©Ž ìŽë»ê² ë ê¹ì? ì륌 ë€ë©Ž ë€ì곌 ê°ìµëë€.
for (const slotName in vm.$scopedSlots) {
// Don't override existing slots of the same name,
// since that's _technically_ possible right now.
if (vm.$slots[slotName]) continue
Object.defineProperty(vm.$slots, slotName, {
get: vm.$scopedSlots[slotName],
enumerable: true,
configurable: true,
writable: true
})
}
ê·žë° ììŒë¡ ë€ì곌 ê°ì 겜ì°:
<A>
<B>
{{ $slot.foo }}
</B>
</A>
ë€ì곌 ê°ìŽ 컎íìŒí ì ììµëë€.
// Assume new render helper:
// _r = mergeSlotData
_c('A', {
scopedSlots: _u([
{
key: 'default',
fn: function(_sd) {
var $slot = _r($slot, _sd)
return [
_c('B', {
scopedSlots: _u([
{
key: 'default',
fn: function(_sd) {
var $slot = _r($slot, _sd)
return [_v(_s($slot.foo))]
},
},
]),
}),
]
},
},
]),
})
foo
ê° <A>
ëë <B>
ìì ìëì§ ì¬ë¶ë ì€ìíì§ ììµëë€. ìëíë©Ž íŽë¹ êµ¬ì± ìì ëŽë¶ìì this.$slots.default
ë° this.$scopedSlots.default(someData)
몚ë ìëíêž° ë묞ì
ëë€.
ëª ê°ì§ 죌ìì¬í:
ì€ì²©ë ì¬ë¡¯ìŽ ìê³ ê·ž ì€ ìŒë¶ë§ ì€ì ë¡ ë²ìê° ì§ì ë ê²œì° $slot
ì¬ì©íë í
í늿ì 컎íìŒë ë ëë§ íšìë slot-scope
ì¬ì©íë 겜ì°ë³Žë€ ìœê° ë íœëë€. ê·žëë í¬ê² ëì ëë ì ëë ìëëŒì êŽì°®ì ê² ê°ìì.
ì€ì ìë ìê°í ì ìì§ë§ ì¬ì©ìê° $slots
/ $scopedSlots
ìŽìì ë°ë³µíê³ ì ìì±ìŽë ì€ë³µ ìì±ìŽ ììŒë©Ž ìêž°ì¹ ìì ëììŽ ë°ìí ì ìë ê·¹ëšì ìž ê²œì°ê° ìì ì ììµëë€. ëª ê°ì§ í¥ë¯žë¡ìŽ íšíŽì íì±ííêž° ìíŽ ìŽì ì ëì ìŒë¡ ëª
ëª
ë $slots
ë° $scopedSlots
륌 ë°ë³µíì§ë§ ìŽ ë³ê²œ ì¬íì ëŽê° ì€íí ì¬ì© ì¬ë¡ì ìí¥ì 믞ì¹ì§ ììµëë€.
ìê°?
ì°ëŠ¬ë
$event
ìíŽ ìŽê²ì íê³ ì묎ë ë¶ííì§ ìë ê² ê°ìµëë€
@chrisvfritz ì€, $event
ëì³€ìµëë€. ë¶ëª
í ê·ì¹ì ëí ììžìŽì§ë§(ëë ê·žê²ìŽ ð
ëŒê³ ìê°í©ëë€), $event
ë ë§€ì° ì íë ë²ìììë§ ì¬ì©í ì ììµëë€(v-bind ìì± ëŠ¬í°ëŽ ëŽììë§ & ì€ì²© ìì).
ê·žëŠ¬ê³ íë¡ìì ëí $scopedSlots
ì $slots
:
ëë ì¬ë¡¯ê³Œ ë²ìê° ì§ì ë ì¬ë¡¯ìŽ ìë¡ ë€ë¥ž ê°ë
ìŽëŒê³ 믿ìê³ Vueë ìŽë¥Œ ë³ëë¡ ì¬ì©í©ëë€. ìŠ, ì¬ë¡¯ê³Œ ë²ìê° ì§ì ë ì¬ë¡¯ìŽ ê°ì ìŽëŠì ê³µì íì§ë§ ë€ë¥ž ì©ëë¡ ì¬ì©í ì ììì ì믞í©ëë€. ê·žë¬ë ëì€ì Vueë ì§ì ë ë²ì ì¬ë¡¯ì ì¬ì©í ì ìì ë ëìŒí ìŽëŠì ê°ì§ ì¬ë¡¯ìŒë¡ ì€ì ë¡ íŽë°±íë€ë ê²ì ë°ê²¬íìµëë€. ëìê² ìŽê²ì ì°ëŠ¬ê° ê·žê²ë€ì ê°ì ê²ìŒë¡ ê°ì£ŒíŽìŒ íë€ë ê²ì ì믞íì§ë§ ê° ìžì€íŽì€ìì $slots
ì $scopedSlots
ì¬ì©í ì ìêž° ë묞ì ë ì ì°íê³ ììì¹ ëª»í ë°©ììŒë¡ ë ëë§ íšììì íì ì¬ì©í ì ììµëë€. , Ʞ볞 ì¬ë¡¯ì ì¬ì©íì¬ ëªšë ëª©ë¡ í목ì ì¬ì ìíê³ êž°ë³ž ë²ì ì¬ë¡¯ì ì¬ì©íì¬ ëšìŒ í목ì ì¬ì ìíë ê²ê³Œ ê°ìµëë€. ìŽê²ì 3.0ìì ì¬ë¡¯ì ëšìŒ ê°ë
ìŒë¡ ë³í©í ê°ë¥ì±ìŽ ëìŒë¯ë¡ ì€ì ë¡ ê¶ì¥ëì§ ììµëë€(묞ì ë° ì€íìŒ ê°ìŽë AFAIKìì ìŽì ëí ê¶ì¥ ì¬ì©ë²ì ì ìíì§ ìììµëë€). ê·žë¬ë 2.xìì ê·žë ê² íë©Ž ì€ëšë©ëë€. ꜀ ì€ëì ë¶í° ìŒë¶ ì¬ì©ìŽ íì©ëììµëë€.
ì°ëŠ¬ë ê·žê²ë€ì 3.0ìì ëšìŒ ì¬ë¡¯ ê°ë ìŒë¡ ë³í©í ê°ë¥ì±ìŽ ìì§ë§ 2.xìì ê·žë ê² íë©Ž ꜀ ì€ëì ë¶í° íì©ë ìŒë¶ ì¬ì©ìŽ ì€ëšë ê²ì ëë€.
@Justineo ëŽê° ì€íŽíê³ ììì§ë 몚륎ì§ë§ ìŽë¯ž 2.xìì ë³í©íë ê²ì ì ìíì§ ììµëë€. ëšì§ íì¬ì ë첎 ëìì íì¥íë ê²ë¿ì
ëë€. $slots
ë° $scopedSlots
몚ë ëìŒí ë€ìì€íìŽì€ë¥Œ ì¬ì©íë ì€ëª
ë ì¬ì© ì¬ë¡ë slot-scope
ì ëììŽ ë³ê²œëì§ ìì ìíë¡ ì ì§ëêž° ë묞ì ì¬ì í ê°ë¥í©ëë€. ì륌 ë€ìŽ:
<div>
Default slot
<template slot-scope="foo">
Default scoped slot {{ foo }}
</template>
</div>
ì¬ì í ì íí ëìŒíê² ìëí©ëë€. ë§ìŽ ëŒ?
@chrisvfritz
2.xìì ë³í©íë ê²ì ëíŽ ìŽìŒêž°í ê²ìŽ ìëëë€. ëë ë¹ì ìŽ ìŽê²ì íë 겜ì°ì ë§íê³ ììë€:
몚ë
$scopedSlots
륌$slots
ìì getterë¡ ì¬ì©í ì ìëë¡ í©ëë€.
$slots.foo
ì $scopedSlots.foo
구ë³í ì ììŒë©° ë ìŽì ë ëë§ êž°ë¥ìì ë³ëë¡ ì¬ì©í ì ììµëë€.
$slots.fooì $scopedSlots.foo륌 구ë³í ì ììŒë©° ë ìŽì ë ëë§ êž°ë¥ìì ë³ëë¡ ì¬ì©í ì ììµëë€.
ìì§í, ëë 몚ë ê²(ì¬ë¡¯ ë° scopedSlots)ìŽ scopedSlotsìì êž°ë¥ìŒë¡ ì¡ìžì€í ì ìë€ë©Ž êž°ì ê²ì ëë€. ê·žê²ì ë ìŽì ìŽë€ ì¬ë¡¯ì ë ëë§í ì§ íìžíë ìžëªšìë ìŒì ì믞í©ëë€. ê°ë°ìê° ìŽë€ ì íì ì¬ë¡¯ì ì¬ì©íëì§ êµ¬ì± ìì êŽì ìì ì€ì ë¡ ì°šìŽê° ììµëë€. íŒí© JSX ë° í í늿 구묞 ì¬ì©ìê° ì ê³µí©ëë€.
@donnysim ì, ë³í©ëìŽìŒ íë€ë ë° ëìí©ëë€. ëë https://github.com/vuejs/vue/issues/9180#issuecomment -447185512ìì ì ê·žë° ì°ë €ê° ìëì§ ì€ëª íìµëë€. ê·žê²ì íì ížíì±ì êŽí ê²ì ëë€.
$slots.foo
ì$scopedSlots.foo
구ë³í ì ììŒë©° ë ìŽì ë ëë§ êž°ë¥ìì ë³ëë¡ ì¬ì©í ì ììµëë€.
@Justineo ì€ì ë¡ $slots
뚌ì ì²ëŠ¬íê³ ìŽë¯ž ì ìë ì¬ë¡¯ì êµì²Žíì§ ìë í ì€ì ë¡ _í ì ììµëë€. ìì ê²ìí ìì 구íì ì°žì¡°íìžì.
for (const slotName in vm.$scopedSlots) {
// Don't override existing slots of the same name,
// since that's _technically_ possible right now.
if (vm.$slots[slotName]) continue
Object.defineProperty(vm.$slots, slotName, {
get: vm.$scopedSlots[slotName],
enumerable: true,
configurable: true,
writable: true
})
}
@chrisvfritz
ë€ì ì륌 ê³ ë €íììì€.
render (h) {
if (!this.$slots.default) {
return h(
'div',
this.items.map(item => this.$scopedSlots.default(item))
)
}
return h('div', this.$slots.default)
}
êµ¬ì± ìì ì¬ì©ìê° vm.$scopedSlots.default
ë§ ì ë¬í ê²œì° this.items
ë°ë³µíê³ item
륌 ë²ì ì§ì ì¬ë¡¯ì ë ëë§íŽìŒ í©ëë€. ê·žë¬ë ìŽì vm.$scopedSlot.default
ê° ë²ì ì§ì ì¬ë¡¯ìŽê³ ì¡Žì¬íë¯ë¡ ë²ì ì§ì ì¬ë¡¯ìŽ ì¬ë¡¯ ëì ížì¶ë©ëë€.
@Justineo ìŽ ì¬ì© ì¬ë¡ë ë§€ì° ë묌ë€ê³ ìê°íì§ë§ ë€ìì ë³ê²œíë©Ž íšíŽìŽ ì¬ì í ê°ë¥í©ëë€.
if (!this.$slots.default) {
ìê²:
if (this.$scopedSlots.default) {
ëë ì¬ì©ìê° ëëë¡ ìŽë€ ìŽì ë¡ ë¬ŽìëìŽìŒ íë ë²ì ì§ì ì¬ë¡¯ì ì ê³µíë 겜ì°:
if (!Object.getOwnPropertyDescriptor(this.$slots, 'default').value) {
ê·žëë ëë ê·žê²ì íêž°ì ìž ë³íë¡ ìê°íì§ ìì ê²ì ëë€. 첫짞, ëìŒí ìŽëŠì ì¬ë¡¯ ë° ë²ì ì§ì ì¬ë¡¯ ì¬ì©ì 묞ìí/ê¶ê³ í ì ìŽ ììŒë¯ë¡ ê³µê° ê³ìœì ìŒë¶ê° ìëëë€. ë짞, ìžêžíë¯ìŽ í í늿ì ë²ìê° ì§ì ë ì¬ë¡¯ì ìŽë¯ž ê°ì ìŽëŠì ë²ìê° ì§ì ëì§ ìì ì¬ë¡¯ìŒë¡ ë첎ë©ëë€. ìŽë ë²ìê° ì§ì ë/ë²ìê° ì§ì ëì§ ìì 겜ê³ê° ìŽì ê°ìŽ ì¬ì©ëëë¡ ìëí ì ìŽ ìë€ë ì¢ì ìì¬ì ìŠê±° ìí ì í©ëë€.
ë§ìŽ ëŒ? ëí ì¬ë¡¯ ìŽëŠì ì¬ì¬ì©íë ì€ì ì¬ì© ì¬ë¡ë¥Œ 볞 ì ìŽ ììµëê¹? ìëë©Ž ìê°ëë ê²ìŽ ììµëê¹? ëë í ì ìì§ë§ ê·žê²ìŽ ê°ë¥íê² íë ì ì©íê³ ë í¹í íšíŽìŽ _are_ ìë€ë©Ž, Vue 3ìì ê·žê²ë€ì ë³í©íêž°ë¡ í ì°ëŠ¬ì ê²°ì ìë ìí¥ì ë¯žì¹ ê²ìŽêž° ë묞ì ì§êž ê·žê²ë€ì ëíŽ ë°°ì°ë ê²ìŽ ì¢ì ê²ì ëë€.
ëë ë²ìê° ì§ì ë ì¬ë¡¯ê³Œ ë€ë¥ž 목ì ì ìíŽ ê°ì ìŽëŠì ê°ì§ ì¬ë¡¯ìŽëŒê³ ìê°í©ëë€.
ëì ìê°. Vueì ìŽì ë²ì ìì ìŽê²ì ìœìíê³ ì ê±°íìµëë€.
íŒëì€ë¬ì êž° ë묞ìŽë€. ìŽì Ʞ볞 ì¬ë¡¯ì 몚ë íìžíŽìŒ í©ëë€.
ê°ë°ìê° ë°ìŽí°ë¥Œ ìë¹íì§ ìê³ ì¬ë¡¯ì ì ê³µí ì ìëë¡ ë²ìê° ì§ì ë ì¬ë¡¯.
ê·žëŠ¬ê³ ì êž°ìµìŽ ë§ë€ë©Ž, ë¹ì ì ì¬ì©í ë ê°ì ìŽëŠì ê°ì§ ì ììµëë€
í
í늿.
@chrisvfritz
íšíŽìŽ ëììŽ ëë©° ì§ìëìŽìŒ íë€ê³ ë§í ê²ìŽ ìëëë€. ì€ì ë¡ íŒëì ìŒìŒí¬ ì ììµëë€. ëë ëšì§ êž°ì¡Ž ìœë륌 깚ë ê²ìŽ ê°ë¥ íë€ê³ ë§í ê²ì ëë€. ì°ëŠ¬ë ì¬ë¡¯ê³Œ ë²ìê° ì§ì ë ì¬ë¡¯ ê°ì ëìŒí ìŽëŠì ê³µì íë ê²ì 묞ìíí ì ìŽ ìì§ë§ ì¬ì©ììê² ê³µì íì§ ë§ëŒê³ ì ìí ì ë ììµëë€. ê·žëŠ¬ê³ í í늿ì íŽë°± ë¡ì§ì 묞ìíëìŽ ìì§ ììµëë€. ìëì ìŽì§ë ìì ìë ìì§ë§ ì ìŽë í í늿ìì íŽë°± ë¡ì§ì ë°°ìž ëê¹ì§ë í©ë²ì ìž ì¬ì©ë²ìŽëŒê³ 믿ììµëë€...
@posva 겜íì ê³µì íŽ ì£Œì ì ê°ì¬í©ëë€!
@Justineo ìŽ ì£ì§ ìŒìŽì€ê° ì¬ì©ììê² ë묎 ë§ì ê³ íµì ì€ ê²ìŽëŒê³ ìê°í©ëê¹, ìëë©Ž Vue 2.xìì ë²ìê° ì§ì ë ì¬ë¡¯ API륌 ê°ì íë ížì륌 ìíŽ íì©ë©ëê¹?
ìŽê²ì "Todo"ë¡ ì®ê²šì¡ìµëë€. - ì°ëŠ¬ë 묎ìì 구íí ì§ì ëí í©ìê° ììµëê¹?
ëë ì§ë 죌ì ìŽê²ì ëíŽ ìê°íŽ ììµëë€. @chrisvfritz ì $slot
ë³ì ì ììŽ ë§ìì ë€ê³ 구í ë°©íŽ ìì륌 íŽê²°íë €ê³ íìµëë€. ì€í ê°ë¥íë€ê³ ìê°íë ê²ì ë€ì곌 ê°ìµëë€.
$scopedSlots
ë 몚ë ì¬ë¡¯ì íšìë¡ ë
žì¶í©ëë€.$slots
ë ë¹ ê°ì²Žë¡ íŽë¹ íšì륌 ížì¶í ê²°ê³Œë¡ ëªšë ì¬ë¡¯ì ë
žì¶í©ëë€.ë°ëŒì ë€ìì ëìŒí©ëë€.
this.$slots.default
// would be the same as
this.$scopedSlots.default({} /* $slot */)
ìì ëŽë¶ ë³ê²œìŒë¡ $slots
ë° $scopedSlots
ë 볞ì§ì ìŒë¡ íµí©ëì§ë§ ìŽì ë²ì 곌 ížíëìŽìŒ í©ëë€! ëí 3.0ìŒë¡ ìœê² ë§ìŽê·žë ìŽì
í ì ììµëë€.
ì ìë $slot
ë³ì륌 ì¬ì©íë ìŒë¶ ì¬ì© ìí:
<!-- list and item composition -->
<fancy-list>
<fancy-item :item="$slot.item"/>
</fancy-list>
<!-- hypothetical data fetching component -->
<fetch :url="`/api/posts/${id}`">
<div slot="success">{{ $slot.data }}</div>
<div slot="error">{{ $slot.error }}</div>
<div slot="pending">pending...</div>
</fetch>
ì€ì²© ë²ì륌 ë³í©íë ê²ì ì¢ì ìê°ìŽ ìëëŒê³ ìê°í©ëë€. ì€ì²©ìŽ êŽë šë ë ëª
ìì ìž ê²ìŽ ë ë«ë€ê³ ìê°í©ëë€(ìŠ, ì€ì²© ë²ì ì¬ë¡¯ìŽ ìë ê²œì° íì slot-scope
ì¬ì©).
<!-- nested usage -->
<foo>
<bar slot-scope="foo">
<baz slot-scope="bar">
{{ foo }} {{ bar }} {{ $slot }}
</baz>
</bar>
</foo>
ë§ì§ë§ ììì $slot
ì°žì¡°íë ì¬ë¡¯ì 묎ìì
ëê¹?
@Akryum { ...foo, ...bar }
ì
ëë€.
@Akryum @Justineo í íŒëì€ë¬ìž ì ììµëë€... ì°ëŠ¬ë slot-scope
ì¬ë¡¯ ì ìµëë€ . ìŠ, ì¬êž°ì foo
ë <foo/>
ì ê³µíë ì¬ë¡¯ ë²ìì
ëë€. bar
ë <bar/>
íê³ $slot
ë <baz/>
... ì§êžì ìŽë¬í ì¬ì©ì íì© í ê²ìŽ ì€ìëŒê³ ìê°í©ëë€. ìëíë©Ž ìŽ ê²œì° ë³Žë€ ì§êŽì ìž ì¬ì©ë²ì ë€ì곌 ê°ìµëë€.
<!-- nested usage -->
<foo slot-scope="foo">
<bar slot-scope="bar">
<baz slot-scope="baz">
{{ foo }} {{ bar }} {{ baz }}
</baz>
</bar>
</foo>
ìŽê²ì íŒë ì€ë¬ìž ì ììµëë€
ìŽ ê²œì° ë ì§êŽì ìž ì¬ì©ë²ì ë€ì곌 ê°ìµëë€.
ì ëì ìŒë¡ ëìí©ëë€. ëí, ì°ëŠ¬ë ê³ìíŽì Destructuringì ì¬ì©í ì ììµëë€.
ì륌 ë€ìŽ:
```ë·°
<FieldValidation field="login" slot-scope="{ value, setValue, error }">
<LoginInput
:value="value"
:error="error"
@input="setValue"
/>
</FieldValidation>
<FieldValidation field="password" slot-scope="{ value, setValue, error }">
<PasswordInput
:value="value"
:error="error"
@input="setValue"
/>
</FieldValidation>
7988a554 ë° 5d52262f륌 íµíŽ íì
ììœ:
몚ë ì¬ë¡¯ìì $slot
ë³ì륌 ì§ìí©ëë€. ( $slot
ììŒë©Ž ì¬ë¡¯ìŽ ë²ì ì§ì ì¬ë¡¯ìŒë¡ 컎íìŒë©ëë€).
ìŒë° ì¬ë¡¯ì í¬íší 몚ë ì¬ë¡¯ì ìŽì this.$scopedSlots
ì íšìë¡ ë
žì¶ë©ëë€. ìŠ, this.$slots.default
ê° ì¡Žì¬íë€ê³ ê°ì íë©Ž this.$scopedSlots.default()
ë íŽë¹ ê°ì ë°íí©ëë€. ìŽë¥Œ íµíŽ ë ë êž°ë¥ ì¬ì©ìë íì this.$scopedSlot
ììŒë©° ë ìŽì ì ë¬ëë ì¬ë¡¯ì ë²ìê° ì§ì ëëì§ ì¬ë¶ì ëíŽ ê±±ì í íìê° ììµëë€. ìŽê²ì 몚ë ì¬ë¡¯ìŽ íšìë¡ ë
žì¶ëë 3.0곌ë ìŒì¹í©ëë€(ê·žë¬ë this.$slots
ëì ).
slot-scope
ì¬ì©ì ëí ë³ê²œ ì¬íìŽ ììŒë©° ìë¡ìŽ ì§ìë¬žìŽ ëì
ëì§ ìììµëë€. 구묞 ë³ê²œì ìµìííê³ ì ì¬ì ìž ììì 3.0ìŒë¡ ëšê²šëê³ ì í©ëë€.
@yyx990803 $slot
몚ë ìžë¶ ì¬ë¡¯ ë²ì륌 ë³í©í©ëê¹, ìëë©Ž ê°ì¥ ê°ê¹ìŽ ì¬ë¡¯ë§ ì°žì¡°í©ëê¹?
@Justineo ë³í©íì§ ìê³ ê°ì¥ ê°ê¹ìµëë€.
ëŽê° ì¡ìžì€í ì ìë ì±ì ë²ìê° ì§ì ë ì¬ë¡¯ ì¬ì©ëì ìŽíŽë³Žë©Ž ì€ì²©ë ì¬ë¡¯ ë³í© ëììŽ ìë 겜ì°ì ì ë° ìŽììì $slot
ìꞰ륌 ì€ì ë¡ ì¬ì©í ì ìë ê² ê°ìµëë€. 묞ì ë Ʞ볞 êµ¬ì± ììê° ìŒë°ì ìŒë¡ ìì HTML ìì ëì ì¬ì©ëë©° ìŽë¬í êµ¬ì± ìììë ì¢
ì¢
ì첎 ì¬ë¡¯ìŽ ìë€ë ê²ì
ëë€. ì륌 ë€ìŽ:
<MapMarkers :markers="cities">
<BaseIcon name="map-marker">
{{ $slot.marker.name }}
</BaseIcon>
</MapMarkers>
ìì ììë <MapMarkers>
êµ¬ì± ììì ëíŽ ë²ìê° ì§ì ë ëšìŒ ì¬ë¡¯ <BaseIcon>
ë ë²ìê° ì§ì ëì§ ìì ì¬ë¡¯ì íì©íì§ë§ ì¬ë¡¯ì ì í íì©íêž° ë묞ì $slot
ë ì ìëì§ ìê±°ë ë³í© ëììŽ ìë ë¹ ê°ì²Žê° ëìŽ clunkierì ëí 늬í©í°ë§ì ê°ì í©ëë€.
<MapMarkers :markers="cities">
<template slot-scope="{ marker }">
<BaseIcon name="map-marker">
{{ marker.name }}
</BaseIcon>
</template>
</MapMarkers>
ì¬êž° ëŽ ì°ë € ì¬íìŽ ììµëë€.
ì ìŽë ëŽ ìì ì ìíë§ìì ê°ì¥ ì쪜 ì¬ë¡¯ë§ ì°žì¡°íë ê²œì° $slot
ì ìŽì ì€ _ëë¶ë¶_ìŽ ìì€ë ì ìë ê²ìŒë¡ 볎ì
ëë€. ì¬ì€, ì¬ëë€ìŽ ë°°ìž APIê° ë ë§êž° ë묞ì ëë³Žë€ ì€ìŽ ë ë§ì ìë ììµëë€.
UI ëŒìŽëžë¬ëŠ¬ë $slot
륌 ì¬ì©í ì ìë€ë ì¬ì©ì ë¶ë§ì ëí ìëµìŒë¡ ì¬ë¡¯ìŽ ë ì í©í v-html
ìíì 곌ëíê² ì¬ì©íêž° ììí ì ììµëë€.
ì¬ì©ìë 겜ì°ì ë°ëŒ Ʞ볞 êµ¬ì± ìì륌 íŒíêž° ììíì¬ ë²ìê° ì§ì ë ì¬ë¡¯ ì¬ì©ì ë³Žë€ ì°ìíê² ì ì§íì¬ ì ì§ êŽëŠ¬ê° ë ì¬ìŽ ìœë륌 ë§ë€ ì ììµëë€.
@yyx990803 $slot
ë³í©ì ëí 죌ì êŽì¬ì¬ë ìŽë€ êµ¬ì± ìì ì¬ë¡¯ ë°ìŽí°ìì ìëì§ ë§íêž°ê° ìŽë µë€ë ê²ì
ëê¹? ê·žë ë€ë©Ž ëŽê° ì¬ì©íë ì€ì²© ë²ì ì¬ë¡¯ì ì¡ìžì€í ì ìë ì±ìŽ ìí ê³µêžì êµ¬ì± ììì ëí ì ìŒí 겜ì°ëŒë ê²ì ìë ê²ìŽ ëììŽ ë ì ììµëë€. ë°ëŒì í¹í ìŽëŠìŽ ì ì§ì ë ì¬ë¡¯ ìì±ì ê²œì° í©ë²ì ìž ì¬ì© ì¬ë¡ìì ì€ì 몚ížì±ìŽ ë°ìíë 겜ì°ë ë§€ì° ëë
ëë€. ê·žëŠ¬ê³ ìë ë³í© ëìì íµíŽ ì¬ì©ìë ë ë§ì ëª
ìì±ìŽ íìíì§ ì¬ë¶ë¥Œ ì€ì€ë¡ ê²°ì í ì ììŒë©° ê·žëŽ ë slot-scope
ê° ì¡Žì¬í©ëë€.
ê·žë¬ë ì 충ììŒë¡ ì¬êž°ì ì ì¬ì ìž ëììŽ ììµëë€. ì€ì²© ë²ì ì¬ë¡¯ì ë³í©íë ëì $slot
ê° _ë²ì륌 ì ê³µí ê°ì¥ ê°ê¹ìŽ ì¬ë¡¯ì ì°žì¡°íëë¡ íë©Ž ìŽë»ê² ë ê¹ì? ê·žë ê² íë©Ž ê°ì¥ 몚íží ì¬ë¡ë¥Œ ì ê±°íë©Žì ì¬ì í ëŽ ì°ë € ì¬íì íŽê²°í ì ììµëë€. ìê°?
ë³í©ì íŒíë 죌ë ìŽì ë ëª
ííì§ ìêž° ë묞ì
ëë€. í
í늿ì ìœë ê²ë§ìŒë¡ë ìŽë€ $slot
ìì±ìŽ ìŽë€ ê³µêžì êµ¬ì± ìììì ì€ëì§ ì ì ììµëë€. ìŽë¥Œ ìíŽìë íì¬ ì§í ì€ìž ìí©ì íìžíêž° ìíŽ ë³Žê³ ìë ê° êµ¬ì± ììì 구í ìžë¶ ì¬íì ìì í ìê³ ììŽìŒ íë©°, ìŽë ë§ì ì ì ì ë¶ëŽì ê°ì€ìíµëë€. ê·ž ìì ì ì 첎 컚í
ì€ížë¥Œ ìŒëì ëê³ ìêž° ë묞ì ìì±íë ìê°ìë êŽì°®ê² ë€ëŠŽ ì ìì§ë§, 믞ëì ë
ì(ë¹ì ìŽë ë€ë¥ž íììŽë )ê° ìœë륌 ìŽíŽíêž°ê° íšì¬ ë ìŽë €ìì§ëë€.
$slotì ë²ì륌 ì ê³µí ê°ì¥ ê°ê¹ìŽ ì¬ë¡¯ì ëíë ëë€.
ëë ê·žê²ìŽ íšê³Œê° ìë€ê³ ìê°íì§ ììµëë€. ëìŒí 묞ì ê° ë°ìí©ëë€. ë¬Žìš ìŒìŽ ìŒìŽëê³ ìëì§ íìžíë €ë©Ž êµ¬ì± ììì 구í ìžë¶ ì¬íì ëíŽ ìììŒ í©ëë€. ë³í©ë³Žë€ íšì¬ ë ììì ìŽê³ ì ì¬ì ìŒë¡ íŒëì€ë¬ìž ì ììµëë€.
ì¥êž°ì ìŒë¡ ê°ì¥ ì¢ì íŽê²°ì±
ì slot-scope
ì ì믞륌 ë³ê²œíì¬ $slot
ë³ì¹/íŽì²Ž ë°©ë²ìŽ ëëë¡ íë ê²ì
ëë€. ë°ëŒì ê·íì ìë ë€ì곌 ê°ìµëë€.
<MapMarkers :markers="cities" slot-scope="{ marker }">
<BaseIcon name="map-marker">
{{ marker.name }}
</BaseIcon>
</MapMarkers>
ìŽë ê² íë©Ž ë³í©í íìê° ìê³ ìŽë€ ë³ìê° ìŽë€ ê³µêžìë¡ë¶í° ì€ëì§ ëª ìì ìŽë©° ì§ëì¹ê² ì¥í©íì§ ììµëë€. (ìŽê²ìŽ ìë§ë 3.0ìì í ìŒìŽëŒê³ ìê°í©ëë€)
ì§êž ì°ëŠ¬ê° ì²í ìŽìí ë¶ë¶ì í
íëŠ¿ìŽ ìë 겜ì°ì slot-scope
륌 ì¬ì©í ì ìëë¡ íì©íëë° ìŽì ë êµ¬ì± ìì ì첎ìì ì¬ì©íì§ ëª»íëë¡ ë§ë ê²ì
ëë€.
3.0ìì ì믞 첎ê³ë¥Œ ë³ê²œíë©Ž ë§ì íŒë곌 ë§ìŽê·žë ìŽì 묞ì ê° ë°ìí ì ììµëë€.
ìë§ë ì°ëŠ¬ë ìë¡ìŽ ìì± slot-alias
ì ëì
íšìŒë¡ìš while 묞ì 륌 íŒí ì ììµëë€. $slot
륌 ë€ë¥ž ê²ìŒë¡ ìšëŠ¬ìŽì±íë ê²ê³Œ ì íí ìŒì¹í©ëë€. ë¬ëŠ¬ slot-scope
, ê·žê²ì ëšì§ êµ¬ì± ììì ì¬ì©í ììë ì첎 ëë í
í늿 ì¬ë¡¯ 컚í
ìŽë (ìŽ ê·žê²ê³Œ ê°ì ì íí ìŒíë ê²ìŽ ì믞í©ëê¹ slot-scope
ì ì¬ì©íë ê²œì° <template>
) :
ì€ì²©ë Ʞ볞 ì¬ë¡¯:
<MapMarkers :markers="cities" slot-alias="{ marker }">
<BaseIcon name="map-marker">
{{ marker.name }}
</BaseIcon>
</MapMarkers>
<foo slot-alias="foo">
<bar slot-alias="bar">
<baz slot-alias="baz">
{{ foo }} {{ bar }} {{ baz }}
</baz>
</bar>
</foo>
ì€ì²©ìŽ ìë ëª ëª ë ì¬ë¡¯:
ë¶ê°íŒíê² ì¥í©íê² ëë ì ìŒí 겜ì°ë ì€ì²©ìŽ ìë ìŽëŠìŽ ì§ì ë ì¬ë¡¯ì ëë€.
<foo>
<template slot="a" slot-alias="a">
<bar slot-alias="b">
{{ a }} {{ b }}
</bar>
</template>
</foo>
(ì¬ì€ ìŽê²ì slot-scope
AND slot-alias
륌 몚ë ì¬ì©íì¬ ë ì¥í©í ì ìì§ë§, ì€íë € íŒëì€ë¬ìž ì ìë€ê³ ìê°í©ëë€. ì ë slot-scope
몚ë ì¬ì©íì§ ìë ë° ì°¬ì±í©ëë€.)
<foo>
<bar slot="a" slot-scope="a" slot-scope="b">
{{ a }} {{ b }}
</bar>
</foo>
ë§ì§ë§ìŒë¡ ()
(JSX ë ë ìíì ìŒë°ì ìŒë¡ ()
ììíë íìŽí íšììŽêž° ë묞ì):
<MapMarkers :markers="cities" ()="{ marker }">
<BaseIcon name="map-marker">
{{ marker.name }}
</BaseIcon>
</MapMarkers>
<foo ()="foo">
<bar ()="bar">
<baz ()="baz">
{{ foo }} {{ bar }} {{ baz }}
</baz>
</bar>
</foo>
ìì ëë±í JSXì ë¹êµíììì€.
<foo>
{foo => (
<bar>
{bar => (
<baz>
{baz => `${foo} ${bar} ${baz}`}
</baz>
)}
</bar>
)}
</foo>
ëììžìŽ ìë ì ìë ê²ê³Œ ë§€ì° ë€ë¥Žêž° ë묞ì ë«ìµëë€. ëì ì ì€ë ë륌 ìœëë€.
ê°ì¥ ì ì©í ëêž
묞ì ë¶íŽ
ì¢ í©íë €ê³ íë©Ž ë€ì곌 ê°ì ì룚ì ì ìíë ê²ì²ëŒ ë€ëŠœëë€.
ìŽ ëªšë 묞ì 륌 íŽê²°í ì ìë ì룚ì ìŽ ìì ì ììµëë€! ð€
$event
forv-on
ì¬ì©íë©Ž ëª ëª ë ìžìê° ìë ììì íšì ëŽìì ì€íëë ííìì ì ê³µíë ì ë¡ê° ììµëë€. ì¬ëë€ì ê·ž ížëŠ¬íšì ìŠêž°ë ê² ê°ìŒë©° ê·žë¡ ìží íŒëì 귞늬 í¬ì§ ììŒë¯ë¡ ë²ìê° ì§ì ë ì¬ë¡¯ì ê²œì° íŽë¹ ì륌 ë°ëŒìŒ í©ëë€.ì ì ë íŽë²
v-scope
륌 ì¬ì©íë ëì ì¬ë¡¯ ë²ì륌$slot
ë¡ ì¬ì©í ì ììµëë€. ì륌 ë€ìŽ:컚í ì€ížì ê²œì° íì í í늿ì ë€ì곌 ê°ì ì ììµëë€.
ì¬ë¡¯ìŽ ì€ì²©ëë©Ž
$slot
ê°ì²Žë ì¬ë¡¯ ë°ìŽí°ë¥Œ ë³í©íê³ ê°ì¥ ì쪜ì ìë ì¬ë¡¯ìŽ ì°ì ìì륌 묎ìí©ëë€. ì륌 ë€ìŽ:ë³í©ì ë€ì곌 ê°ìŽ ë³ŽìŒ ì ììµëë€.
ë€ìì€íìŽì€ 겹칚ì ì²ëŠ¬íë ë°©ë²ì ëíŽ ê±±ì /ê¶êží ì ììŒë©° 99.9%ì 겜ì°ìë ì€ì ë¡ ë¬žì ê° ëì§ ìì ê²ìŽëŒê³ ìê°í©ëë€. ì륌 ë€ìŽ:
ìì ììì
$slot.user
ë ì€ì²© ë²ììë ë¶êµ¬íê³ íì ì¬ë°ë¥ž ê°ì ê°ìµëë€. ê·žë¬ë ë€ì곌 ê°ìŽ ë ìì±ì ëìì ì¡ìžì€íŽìŒ íë 겜ì°ê° ììµëë€.ìŽë¬í ë묞 겜ì°ì ê²œì° ì¬ì©ìë íì¬ ëì곌 íšê»
slot-scope
륌 íì¶ì© íŽì¹ë¡ ì¬ì©í ì ììµëë€. íì§ë§v-scope
ë ì¬ì í íìíì§ ììµëë€. ëŽê° ì¬ë°ë¥Žê² ìŽíŽíë€ë©Ž$slot
ê°ì²Žê° ëìŒí 묞ì 륌 ìŒìŒí€ì§ ìê³ ìŽë¯ž ë¬ì±íì ê°ì¥ ìŒë°ì ìž ì¬ì© ì¬ë¡ë¥Œ ëšìííë ê²ìŽ 목ì ìŽêž° ë묞ì ëë€.ì¥ì
ì¬ì©ìê° ì¬ë¡¯ìì ì ê³µíë ë°ìŽí°ì ì¡ìžì€íë €ê³ í ë ì ìŒí ìì©êµ¬ë
$slot
ì ëë€. ìì±ìŽ ì ìë ìì¹ë¥Œ íìžíêž° ìíŽ êµ¬ì± ìì륌 ê²ìí íì ììŽ ë°ìŽí°ê° ì¬ë¡¯ìì ìë€ë ê²ìŽ ìŠì ëª ë°±í©ëë€.ìŽë€ ë°ìŽí°ì ì¡ìžì€í ì ìëì§ ìêž° ìíŽ ì¬ì©ìë ìœí ìž ê° ë ëë§ë ì¬ë¡¯ë§ ìê°íë©Ž ë©ëë€ .
v-scope
íë©Žv-for
ì²ëŒ ìëíë€ê³ ê°ì íë ì¬ëë€ìê² ë§ì íŒëìŽ ìì ê²ìŽëŒê³ ìê°í©ëë€. ìëíë©Ž ìŽê²ìŽ ë²ìê° ì§ì ë 컚í ì€íž ìì±ì ì ìíë ì ìŒí ë€ë¥ž ì§ì묞ìŽêž° ë묞ì ëë€.ì¬ì©ìë ë²ìê° ì§ì ë ì¬ë¡¯ì ì¬ì©íêž° ìíŽ êµ¬ì¡°íì ìµìíê³ ížìí íìê° ììŒë¯ë¡ íìµ ê³¡ì ìŽ ì€ìŽëëë€.
ìŽë€ 겜ì°ìë í¹í 몚ë ìí륌 ì ê³µíë ë§ì ì€ì²©ë ì¬ë¡¯ìŽ ìë ê²œì° ìŒë¶ ìíê° _ìŽë êµ¬ì± ìììì ìëì§ ëª ííì§ ììŒë©° ì¬ì©ìë
slot-scope
ë€ì ëë¬íŽìŒ í©ëë€. ìŽê²ì ëšì ì²ëŒ ë€ëŠŽ ì ìì§ë§ ì€ì²© ë²ì ì¬ë¡¯ì 볌 ë ê±°ì íì ìí ì ê³µì íšíŽì ëí ê²ì ëë€. ìŽë ë°íšíŽìŽëŒê³ ê°íê² ëëëë€. ì¬êž° ëŽ ì¶ë¡ ìŽ ììµëë€. ë°ëŒì ë§ì ì€ì²© ë²ì ì¬ë¡¯ìŽ ë ë§ì ìì©êµ¬ë¥Œ íìë¡ íë€ë ì¬ì€ì ì€ì ë¡ ìí° íšíŽì ì¬ì©ì ì€ìŒ ì ììµëë€ .ëë¶ë¶ì Vue ê°ë°ìë ê°ì²ŽìŒ ë¿ìž
$slot
ë§ êž°ìµíë©Ž ëë¯ë¡ API ë žì¶ ìììŽ í¬ê² ì€ìŽëëë€ .$
-prefixed ìì±ì ì¬ì©íì¬$slot
ê° Vueìì ëª íí íë ë°©ììŒë¡ ì¹ êµ¬ì± ìì ì¬ë¡¯ API륌 구ì¶íê³ ììµëë€.íì¬ ëŒìŽëžë¬ëŠ¬ë ì¢ ì¢ ê°ì ê²ì í
<slot v-bind="user" />
ê·žëì ìì ì ì¬ì©ìê°ìë ëª êžì ì ì¥í ìslot-scope="user"
ëìslot-scope="{ user }
. ìžë» 볎Ʞì ê³ êžì€ë¬ì 볎ìŽì§ë§, ìí°íšíŽìŒë¡ 겜ííê² ëììµëë€. êµ¬ì± ììê° ì¬ì©ì ìŽìžì ë°ìŽí°ë¥Œ ë žì¶íë €ê³ í ë 묞ì ê° ë°ìí©ëë€. ê·žë° ë€ì ë ê°ì§ ì íìŽ ììµëë€. API륌 í¬ê² ë³ê²œíê±°ë ìŽ ì ìì±ìuser
ê°ì²Žì ê°ì ì ì©íë ê²ì ëë€. ì¬ì©ìì êŽë šìŽ ê±°ì ììì§ëŒë ë§ì ëë€. ìŽë 쪜ë íë¥í ìµì ìŽ ìëëë€. ë€íí$slot
ë êµ¬ì± ìì륌 ë 믞ë ì§í¥ì ìŒë¡ ë§ë€ë €ë ì í¹ì ì ê±°í©ëë€.$slot
ê°$slot.user
ë³Žë€ ì¬ì í 짧ì§ë§ ì¬ì©ì륌$slot
ìŒë¡ ë³ì¹ì ì§ì íì¬ ì€ìí 컚í ì€ížë¥Œ ìêž° ë묞ì ëë€ëšì
slot-scope
ëë¬í ì ììŒë¯ë¡ í° ë¬žì ë ìëëŒê³ ìê°í©ëë€. ëí, ìì ìžêžíë¯ìŽ ì¬ì©ìê° ì²ìì ìŽ ë¬žì ê° ìë ê²œì° ìí ê³µêžì êµ¬ì± ììë¡ ìì ì ìê³ ìì ê°ë¥ì±ìŽ ë§€ì° ëë€ê³ ìê°í©ëë€.