2.3.3
Π― ΡΠΎΠ·Π΄Π°Π» ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΏΡΡΠ°ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ, Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΎΡΡΠΎ Π½ΡΠΆΠ΅Π½ JSX.
Π‘Π²ΠΎΠΉΡΡΠ²Π°, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ ΠΎΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»Ρ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π² ctx.injections
.
Ctx.injections
ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ, Π½ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΡΡΡΡΠΌ. Π‘Π²ΠΎΠΉΡΡΠ²Π° Π½Π΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°.
ΠΡΠΎ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ parent
, child
ΡΡΠΈΡΠ°Π΅ΡΡΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ vm
(Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°ΡΡΡΡ Π½Π°ΠΏΠΈΡΠ°ΡΡ provide
Π² vm
.
ΠΡΡΠ°ΡΠΈ, Π²Π°ΡΠ° ΡΠΊΡΠΈΠΏΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ [email protected] π
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΠΈΡΠΊΠ° Π΄Π»Ρ provide inject Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ ΡΠ΅Π±Ρ Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ
Π°ΡΡΠΈΠ±ΡΡΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅Ρ ΡΠ²ΠΎΡ ΠΈΠ΅ΡΠ°ΡΡ
ΠΈΡ $parent
Π² ΠΏΠΎΠΈΡΠΊΠ°Ρ
ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ
ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΠΎΠ², ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π² ΠΊΠΎΡΠ½Π΅.
https://github.com/vuejs/vue/blob/b182ac40697edbe8253d4bd68b6ac09e93259e1c/src/core/instance/inject.js#L59 -L59
ΠΠ΅ ΡΠ΄Π°Π»ΠΎΡΡ Π·Π°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΠΊΡ, Π½ΠΎ ΠΊΠΎΠ³Π΄Π° Ρ Π·Π°ΠΏΡΡΡΠΈΠ» https://jsfiddle.net/Austio/vhgztp59/7/ ΡΡΡ ΡΠΊΡΠΈΠΏΠΊΡ, ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ $ Π½Π΅ Π±ΡΠ» ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅, ΠΊΠΎΠ³Π΄Π° Ρ Π΄ΠΎΡΠ΅Π» Π΄ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΠΎΠΈΡΠΊΠ°. ΠΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, ΡΡΠΎ Π½Π°ΡΠ°Π»ΠΎ, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³ΠΎΠΌ Π² ΡΠ»ΠΎΡΡ ΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ Π½Π΅Ρ ΡΠ²ΡΠ·ΠΈ.
ΠΏΠΎΡ ΠΎΠΆΠ΅, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π΄ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΠ»ΠΎΡΠΎΠ²
@Kingwl ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΈ ΡΡΠΎ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅.
ΠΠΎΠΌΠ½Ρ, Ρ ΠΏΠΎΠ΄Π½ΡΠ» ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡ ΠΎΠ΄ΠΈΠ» Ρ ΡΠΌΠ° ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ. Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Π΄Π»Ρ ΠΌΠ΅Π½Ρ ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄Π΅Π»ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½Ρ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π² ΡΠ»ΠΎΡΠ΅ ΠΎΠ½ΠΈ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΡΡΡΡ ΠΊ Π²Π½Π΅ΡΠ½Π΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π½Π΅ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ:
ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π²Π²ΠΎΠ΄ΠΈΡ mode: 'foo'
ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ <div><slot/></div>
<!-- rendered in App -->
<container>
<!-- parent is App, mode is undefined -->
<functional></functional>
</container>
<container>
<!-- parent is container, mode is foo -->
<not-functional></not-functional>
</container>
edit: @alidcastano Π― ΠΎΠ±Π½ΠΎΠ²ΠΈΠ» ΡΠΊΡΠΈΠΏΠΊΡ Π² Π²Π°ΡΠ΅ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π²Π°Ρ Π΄Π°ΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Vue 2
Π₯Π°-Ρ Π°, ΠΈΠ·Π²ΠΈΠ½ΠΈΡΠ΅ Π·Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ Vue Π² ΡΠΊΡΠΈΠΏΠΊΠ΅, Ρ Π±ΡΠ» ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ²Π»Π΅ΡΠ΅Π½ ΡΠ΅ΠΌ, ΡΡΠΎ Π½Π΅ ΡΠΌΠΎΠ³ Π½Π°ΡΡΡΠΎΠΈΡΡ JSX, ΡΠ΅Π³ΠΎ Ρ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π». @posva Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ
-
ΠΡΠ°ΠΊ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π΄Π΅ΡΡ Π½Π΅ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°, Π° Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π΄ΠΎ ΡΠ»ΠΎΡΠ°?
@LinusBorg ΠΠΎΠ΄ "ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ" ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ Π»ΠΈ ΡΡΠΎ, ΡΡΠΎ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½ΠΎ?
ΠΠΎΠ»ΠΆΠ΅Π½ Π»ΠΈ Π±ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ vm
ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΡ? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ Π½Π° ΡΡΠΎ:
// before
<parent-component>
<child-component />
</parent-component>
// after
<vm-container>
<parent-component>
<child-component />
</parent-component>
<vm-container>
ΠΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠ°ΠΆΠ΅ΡΡΡ ΠΈΠ·Π»ΠΈΡΠ½Π΅ ΡΠ°Π·Π΄ΡΡΡΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΡΠ½ΠΎΡΡΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΡΠΆΠ΅ Π²Π»Π΅ΠΊΠ»Π° Π·Π° ΡΠΎΠ±ΠΎΠΉ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΠ» ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌΡ. ΠΠΎ Ρ ΠΎΡΠΊΡΡΡ Π΄Π»Ρ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ; ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π²Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΠ΅?
vm-container
Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ»ΠΎΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΡΡΡ Π² app
context
ΠΠΎΠ΄ Β«ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌΒ» ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠ±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΡΠΈ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΈΠ»ΠΈ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½ΠΎ?
Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎΡ Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ²:
<!-- template of a `parent` component -->
<template>
<Child>
<functional />
</Child>
</template>
ΠΠΎΠ³Π΄Π° Π²Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π² ΡΠ»ΠΎΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΡΡΠΈΡΠΎΠ²Π°Π½, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½ Π΄ΠΎΡΠ΅ΡΠ½Π΅ΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΡΡΠΎΠ±Ρ ΡΡΠΎΡ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΌΠΎΠ³ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠ΅ vNodes Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΡΠ»ΠΎΡΠ°. (*)
Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΠΌΠΎΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΡΡΠ΅ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° <functional>
Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ( <parent>
), Π° Π½Π΅ <child>
.
Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π΄ΠΎΡΡΡΠΏΠ½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ ΠΈΠ½ΡΠ΅ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΈ Π² <parent>
.
(*): ΠΠΌΠ΅Π½Π½ΠΎ ΡΠ°ΠΊ ΡΠ΅ΠΊΡΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ. Π§ΡΠΎΠ±Ρ ΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ, ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π½ΡΡΡΠ΅Π½Π½Π΅ΠΉ ΠΌΠ΅Ρ Π°Π½ΠΈΠΊΠΈ.
@posva @LinusBorg ΠΠΎΠ½ΡΡΠ½ΠΎ , ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° ΠΎΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΠ·-Π·Π° ΡΡΠΈΡ
ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ provide / inject Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ - ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ΅ΠΊΠ²ΠΈΠ·ΠΈΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ app
.
Π― ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°Π·ΡΡΡΠ½Π΅Π½ΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ. ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, Π·Π°ΠΊΡΠΎΠΉΡΠ΅ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π΅ΡΠ»ΠΈ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π΄Π΅Π»Π°ΡΡ ΠΈΠ»ΠΈ ΡΡΠΎΡΠ½ΡΡΡ; Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π΅ΡΠ΅ ΡΠ°Π·!
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ΄Π°ΡΡΡΡ Π½Π°ΠΉΡΠΈ ΡΠΏΠΎΡΠΎΠ± ΡΠ»ΡΡΡΠΈΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ Π² ΡΠ»ΠΎΡΠ΅
ΠΠΎ Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ΠΎ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π»ΠΈ @posva ΠΈ @LinusBorg.
@Kingwl Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ
ΠΠ°ΠΊΠΎΠ½Π΅Ρ-ΡΠΎ Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Π²ΡΠ΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΏΡΡΠ°ΡΡΡΡ Π²ΠΊΠ»ΡΡΠΈΡΡ ΡΡΠΎ Π² ΡΠ²ΠΎΠΉ ΠΏΠ»Π°Π³ΠΈΠ½ vue-mobiledoc-editor, ΡΠ»Π΅Π΄ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡ Π²ΡΡΠ΅ ΡΠΎΠ²Π΅ΡΡ. ΠΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΡΡ Ρ ΠΏΡΠ΅Π΄Π²ΠΈΠΆΡ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΠ· ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° app
, ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΡΠ΄Π½Π΅Π΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ Π³ΠΈΠ±ΠΊΠΎΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΡ
ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΌΠ½Π΅ Π½ΡΠΆΠ½ΠΎ ΡΠΊΡΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΡΠΆΠ΅ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π² ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ:
...
export default Vue.extend({
render (h) {
return (
<div>
<ParentComp>
<ChildFuncComp/>
</ParentComp>
</div>
)
},
provide () { // data that needs to be injected into functional components
return {
msg: 'hello'
}
},
components: {
ParentComp,
ChildFuncComp
}
})
Π’ΠΎΠ³Π΄Π°, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠ»Π°Π³ΠΈΠ½, ΡΡΠΎ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊ:
// template
<div id="app">
<div id="#someWhereInApp" />
</div>
// script
import SuperCoolComponent from 'SuperCoolComponent'
export default {
mounted () {
this.$once('mounted', () => new SuperCoolComponent().$mount('#someWhereInApp'))
this.$emit('mounted')
}
}
ΠΡΠ»ΠΈ ΠΌΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π²Π΅ΡΠ½Π°, ΡΡΠΎ ΡΠ΅ΡΡΠ΅Π·Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ provide / inject Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²Π°ΠΌ Π½Π΅ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΎ ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡΠ°Π»ΡΠ½ΠΎ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ.
ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ Ρ Π±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΏΠΎΠ»Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ / Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ
Ρ ΠΏΡΡΠ°ΡΡΡ ΡΠ΅ΡΠΈΡΡ ΡΡΠΎ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎ Π΄ΠΎΠ»Π³ΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ
@Kingwl Π£Π΄Π°Π»ΠΎΡΡ Π»ΠΈ Π²Π°ΠΌ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ?
ΠΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² Π²Π΅ΡΡΠΈΠΈ 3?
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΡΡΠ°ΡΡΡ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡ v-for Π² ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°, Π½ΠΎ ΠΌΠΎΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ (ΡΠ°ΠΊ ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΆΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ ΠΏΡΠΈ Π²Ρ ΠΎΠ΄Π΅ Π² ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°, ΠΈ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΠΈΡ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ).
ΠΡΡΡ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ?
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΠΠ»Π°Π½ΠΈΡΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ΅ΡΠΈΡΡ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² Π²Π΅ΡΡΠΈΠΈ 3?
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Ρ ΠΏΡΡΠ°ΡΡΡ Π°Π±ΡΡΡΠ°Π³ΠΈΡΠΎΠ²Π°ΡΡ v-for Π² ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°, Π½ΠΎ ΠΌΠΎΠΈ Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ (ΡΠ°ΠΊ ΡΡΠΎ ΠΎΠ½ΠΈ ΡΠΆΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ ΠΏΡΠΈ Π²Ρ ΠΎΠ΄Π΅ Π² ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π°, ΠΈ Ρ Π½Π΅ ΠΌΠΎΠ³Ρ ΠΈΡ ΠΊΠ»ΠΎΠ½ΠΈΡΠΎΠ²Π°ΡΡ).