ăŚăźăśăźăéĺććä˝ăŤäžĺăăăŠă¤ăăľă¤ăŻăŤăăăŻăĺŽčŁ ăăĺż čŚăăăĺ ´ĺăvueăŻĺŽčŁ ăăăăăăŻăŽéĺćć§ăĺ°éăăvueăŠăłăă§ăăăĺž ă¤ĺż čŚăăăăžăă
APIăŻĺ¤ć´ăăăžăăă éĺćăăăŻăĺž ă¤ăă¨ăŤăăŁăŚăçžĺ¨ăŠăŽăăăŤćŠč˝ăăăă ăă§ăă
ăăŞăăćăă§ăăăŽăŻ
created () {
return new Promise(resolve => {
setTimeout(() => {
console.log('created')
resolve()
})
})
},
mounted () {
console.log('mounted')
}
襨示ăă
mounted
ďź
ćŠč˝ăŞăŻă¨ăšăăä˝ćăăă¨ăăŻăĺŽéăŽăŚăźăšăąăźăšăčż˝ĺ ăăŚăăŞăŻă¨ăšăăĺŽčŁ ăă䞥ĺ¤ăăăăăăŤăăŚăă ăăă
ăăăŻçčŤçăŤăŻăŻăźăŤăŞă˘ă¤ăă˘ă§ăăăăăăĺŽçžăăăŤăŻă˘ăźăăăŻăăŁăŽć šćŹçăŞĺč/ć¸ăç´ăăĺż čŚă§ăăăăŠă¤ăăľă¤ăŻăŤăăăŻăŽĺćć§ăŤäžĺăăĺ¤ăăŽăă¸ăăŻăĺŁăĺŻč˝ć§ăăăăžăă ăăăăŁăŚăăăŽĺ¤ć´ăćŁĺ˝ĺăăăăăŤăŻăăĄăŞăăă大ăăĺż čŚăăăăžăăăăăăŞăă¨ăĺŽĺ ¨ăŞă˘ăăă°ăŹăźăăč¨çťăăŚăăĺ ´ĺăŤăŽăżć¤č¨ă§ăăžăăăăăŻăăăăŤăŻçşçăăŞăĺŻč˝ć§ăăăăžăă
ă¨ăăăăçˇ ăăăăăžăăăăăĺ ˇä˝çăŞççą/ăŚăźăšăąăźăš/役éżăŤă¤ăăŚăăŠăăźă˘ăăăăŚăă ăăă
@posvaç解ăăžăă-ă芍ăłçłăä¸ăăžăă ç§ăŽĺŽéăŽăŚăźăšăąăźăšăŻăăăźă¸ăŤăźăăăŠăĄăźăżăăďź this.$route.params
ăäťăăŚďź user_id
ăĺăĺăăăăźăżăăźăšăăĺŽéăŽăŚăźăśăźăăźăżăăă§ăăăăUserPage
ăłăłăăźăăłăăăăĺ ´ĺă§ăă揥ăŽăăăŞăłăăłăă使ç¨ăăŚăľăźăăźä¸ă§ďź
this.user = await client.get({type: 'user', id: this.$route.params.id})
ăăă§ă this.user
ăŻă UserPage
ăłăłăăźăăłăăŽdata
é¨ĺăŤăăuser
ăăŁăźăŤăăćăăžăă
çćłçăŤăŻăăłăłăăźăăłăăä˝ćăăăĺžďź this.$route.params
ă使ç¨ĺŻč˝ăŤăŞăăăăŤďźăăłăłăăźăăłăăĺŽéăŤăăŚăłăăăăĺăŤăăŽăłăźăčĄăĺŽčĄăăŚăăăłăăŹăźăă§user
ĺŽĺ
¨ăŤä˝żç¨ă§ăăăăăŤăăžăăćŞĺŽçžŠăŽĺ¤ăŤé˘ăăă¨ăŠăźăĺĺžăăăŤ
@ yyx990803
ç§ăŻăăă§ăŻĺĺżč
ăăăăăžăăăăVueăŠăłăă§mounted
ăŞăŠăŽăŠă¤ăăľă¤ăŻăŤăăăŻăĺźăłĺşăĺăŤawait
ăăźăŻăźăăčż˝ĺ ăăăă¨ă ăăĺ¤ć´ăăăšăă§ăŻăăăžăăăďź
ăăăŻç§ăĺž ăĄćăă§ăăĺŽéăŽăłăźăă§ăďź
beforeMount: async function() {
this.user = await client.get({type: 'user', id: this.$route.params.id});
}
ăăăŻUserPage
ăłăłăăźăăłăăŽä¸é¨ăŤăŞăăžăă
ĺżé ăŞăďź ç§ăŻăăŽăŚăźăšăąăźăšăćłĺăăŚăăžăăă čŞăżčžźăżçść ă襨示ăăăăžăăžăŞćšćłăéăăăăăăvue-routerăŽăăăĽăĄăłăă§čŞŹćăăăŚăăăăăŤĺŚçăăăă¨ăăĺ§ăăăžăă ăłăłăăźăăłăăăŹăłăăŞăłă°ăăĺăŤăăăźăżăăăăŤăăăŽăăă§ăŤĺž ă¤ăă¨ăă§ăăžăă
OKăăăăŻçăŤăăŞăŁăŚăăžăă ăă ăăăŚăźăśăźăăźă¸ăŽç°ĄçĽçă§ăăăŚăźăśăźăłăłăăźăăłăďźăă¨ăă°ăFacebookă§ăŚăźăśăźăŽĺĺăŤăŤăźă˝ăŤăĺăăăŚăăăăĄă¤ăŤăăčŚăăă¨čĄ¨ç¤şăăăăłăłăăźăăłăăŞăŠďźăăăĺ ´ĺăŻăŠăăŞăăžăăďźăăă§ăŻé˘äżăŞăă id
ăŻăăăăăŁă¨ăăŚăłăłăăźăăłăăŤć¸Ąăăăžăă
ăăă§ĺ ¨ä˝ĺăčŚăă¨ăJavaScriptăŽé˘ć°ăŻĺćăžăăŻéĺćăŽăăăăăŤăŞăăăŠă¤ăăľă¤ăŻăŤăăăŻăŻé˘ć°ă§ăăăé˘ć°ă¨ăăŚăŽčăćšăŻéĺćăăľăăźăăăĺż čŚăăăăžăďźç§ăŽăŚăźăšăąăźăšă¨ç´ćçăŞăăŞăźăăă§ç¤şăăăŚăăžăďźăç§ăăăă§ä˝żç¨ăăŚăăă˘ăăăźăăŤă¤ăăŚďźă
ăăŞăăŻăăăăăĺ¤ăăŽćšćłăăăăžăă ćăĺç´ăŞćšćłăŻănullă§ĺ§ăžăĺ¤ć°ă使ç¨ăăăăźăżăăă§ăăăăŚč¨ĺŽăăĺŽéăŽăłăłăăźăăłăăĺăćżăăžăďźv-ifăŽăăďźă ăăă¨ăăžăăăŻăŞăăźă¸ă§ăłăŻăăłăłăăźăăłăă解湺ăăŚ<component :is="myDynamicComp"/>
ă使ç¨ăăé˘ć°ă§ăđ
ăă ăăĺéĄăăă¤ă¸ăŁăăŻăăŚčłŞĺăŤăăŞăă§ăă ăăđăăŠăźăŠă ă使ç¨ăăăăăăŽăăăŤä¸ĺă使ç¨ăăŚăă ăă
ăăăăç§ăŻćŹĺ˝ăŤăłăźăăŽĺŠăăĺż čŚă¨ăăžăăďź ĺŽéăç§ăŻăă§ăŤăăŞăăŽććĄă¨é常ăŤăăäźźăĺéżçăĺŽčŁ ăăŚăăžăă ç§ăč¨ăăă¨ăăŚăăăŽăŻăJSéĺććŠč˝ă使ç¨ăăćšăăŻăăăŤç´ćçă ă¨ăăăă¨ă§ăă
ç§ăć°äťăăŚăăŞăăŁăăŽăŻăéĺćăłăźăă¨ĺćăłăźăăŻćŹčłŞçăŤć šćŹçăŤç°ăŞăăăăĺćăłăźăăŻăăăčŞä˝ăéĺćăłăźăăŤć šćŹçăŤĺ¤ć´ăăăŤăéĺćăłăźăăŤĺźˇĺśçăŤćşć ăăăăă¨ăŻă§ăăŞăă¨ăăăă¨ă§ăă yyx990803ăŻăăăŤăăăčŚăžăăăă彟ăŽăłăĄăłăăĺŽĺ ¨ăŤç解ăăăŽăŤĺ°ăćéăăăăăžăăă ăćéăĺ˛ăăŚăăă ăăăăă¨ăăăăăžăăéä¸ă§ç§ăŽĺ´ăŤčŞ¤č§ŁăăăŁăĺ ´ĺăŻçłă訳ăăăžăăă
ăăăŤăăă¤ăăŽăŚăźăšăąăźăšăăăăăăă¤ăăŽććĄă¨ĺéżćšćłăĺĺžăăăă¨ćăăžăă
MainPage.vue
ăç§ăŽăĄă¤ăłăłăłăăă§ăă beforeCreate
ă§ajax "/ init"ăĺźăłĺşăăŚăŚăźăśăźć
ĺ ąăĺĺžăăVuex.storeăŤăłăăăăăžăă
Content.vue
ăŻă MainPage.vue
ĺ
ăŽĺă§ăă Vuex.storeăăăŽăŚăźăśăźăŽĺ˝šĺ˛ăŤĺżăăŚă mounted
掾éă§ăăžăăžăŞAPIĺźăłĺşăăĺźăłĺşăăăă¨ćăăžăă
async / awaităăăźă§ăŽăŠă¤ăăľă¤ăŻăŤĺźăłĺşăăŽĺ ´ĺăé ĺşăŤĺžăăžăă
茪beforeCreate->茪ä˝ć->ĺbeforeCreate->ĺä˝ć->ĺăăŚăłă....ďźăłăłăăźăăłăăŽăŠă¤ăăľă¤ăŻăŤăŤă¤ăăŚćŁăăç解ăăŚăăĺ ´ĺďźă
ăăăăçžĺ¨Content.vue
ă§ăŚăźăśăźć
ĺ ąăĺĺžă§ăăžăăăăŠăăăă°ĺéżçăââĺ
Ľćă§ăăžăăďź
ă/ inităAPIăŻĺ¤ăăŽăăźă¸ďźVue-RouterăŽăłăłăăăźďźă§ä˝żç¨ăăăŚăăăăă MainPage.vue
ĺ
ă§ĺźăłĺşăăăăžăžăŤăăŚăăăăă¨ćăăžăă
stackoverflowăŤčłŞĺăć稿ăăžăă
ăăăă¨ă
䞥ĺ¤ăŽăăăăŽăŤĺŻžăăăăăŻăŽĺéżçďź
{
created: function(){
this.waitData = asyncCall();
},
mounted: function(){
this.waitData.then(function(data) { ... })
}
}
čăăăăăăăăăŠăăăŞăă˝ăŞăĽăźăˇă§ăłďź
{
async created () {
let createdResolve = null
let createdReject = null
this.createdPromise = new Promise(function(resolve, reject){
createdResolve = resolve
createdReject = reject
})
await asyncCall1()
await asyncCall2()
...
createdResolve(someResult)
}
async mounted () {
let result = await this.createdPromise
...
}
data () {
return {
createdPromise: null
}
}
}
ăăăŻăžă ĺéĄă§ăŻăăăžăăăďź
data() {
...
},
async created() {
const something = await exampleMethod();
console.log(something);
}
ç§ăŽăăăŤĺăăŚăăžăďź @fifmanăč¨ĺăăŚăăăăăŤďźă
@breadadamsăŻăăăăĄăăă§ăă created
ăĄă˝ăăăŽ_inside_é˘ć°ăĺž
ćŠăăăžăăă created
ăžăăŻmounted
é˘ć°čŞä˝ăŻĺž
ćŠăăăžăăă
ăăăăŁăŚăVueă¤ăłăšăżăłăšăŻcreated
ăĺźăłĺşăă created
ă§éˇćéĺŽčĄăăăŚăăăăăťăšăçľäşăăĺăŤăĺłĺş§ăŤmounted
ăĺźăłĺşăăžăă
ăăăç§ăŽćŞă@ darren-dev-ç§ăŽĺ´ă§ăŻç°ăŞăăŚăźăšăąăźăšă§ăăăäťăŻĺéĄăçşçăăŚăăžăđ ć確ăŤăăŚăăăŚăăăă¨ăă
@breadadamsăžăŁăăĺéĄăăăžăă-ç§ăăĄĺ ¨ĺĄăç§ăăĄčŞčşŤăŽăąăźăšăŽăăăŤăăăŤăăžăăç§ăć確ăŤăăăă¨ăă§ăăŚăăăăă§ăďź
éĺćăŠă¤ăăľă¤ăŻăŤăăăŻăŻă揥ăŽăĄă¸ăŁăźăăźă¸ă§ăłă§ĺŞăăĺŽčŁ ăŤăŞăĺŻč˝ć§ăăăăžă
ăŠă¤ăăľă¤ăŻăŤăĄă˝ăăăŽéĺćăľăăźăă訹ĺŻăăă¨ăăăăŠăŤăă§ćŞăUXăăŠăŻăăŁăšăĺŠéˇăăăăăăŤćăăăžăă ăŠăŽăăăŤďź éĺććŠč˝ăŻăăăăŤĺŽäşă§ăăŞăăŞăŻă¨ăšăďźéˇćéĺŽčĄăŞăŻă¨ăšăăăăăăŻăźăŻăŞăŻă¨ăšăăŞăŠďźăŤä˝żç¨ăăăžăă VueăŤăä˝ćăăăŚăłăăăžăăŻăăŽäťăŽăŠă¤ăăľă¤ăŻăŤăĄă˝ăăăŽăăăăăăăăăŻăźăŻčŚćąăžăăŻéˇćéĺŽčĄăăăéĺćăăăťăšă§ĺž ćŠăăăăăŤĺźˇĺśăăă¨ăăŚăźăśăźăŤéĄčăŞĺ˝ąéżăä¸ăăžăă ăŚăźăśăźăăľă¤ăăŤă˘ăŻăťăšăăăłăłăăźăăłăăăŚăźăśăźăŽăăăŽăăăťăŤćĽçśăăăăăŻăźăŻčŚćąăĺŽäşăăăŽăĺž ă¤éă犺ç˝ăŽçťé˘ă§4ç§éĺž ćŠăăĺż čŚăăăă¨ćłĺăăŚăă ăăă ăžăăăăăŻăŚăźăśăźăŤćŞĺ˝ąéżăä¸ăăă ăă§ăŞăăçśćłăŽĺśĺžĄăç ç˛ăŤăăžăăéçşč ă¨ăăŚăăŚăźăśăźăăăźăćéăčŞčă§ăăăăăŤăăăăé˛čĄçśćłă¤ăłă¸ăąăźăżăźă確ĺŽăžăăŻä¸ç˘şĺŽăŤčĄ¨ç¤şăăăăăăăăŤă§ăăăă¨ăŻä˝ăăăăžăăă ăăăăŁăŚăăăŽćŠč˝ăVueăŤçľăżčžźăăă¨ă§ăWebăăăčŻăĺ ´ćăŤăăăă¨ăŻă§ăăžăăă ăăŞăăŻćŞăçżć ŁăĺŻč˝ăŤăăŚăăă
ćĺăăéĺćăŽĺ ´ĺăŽč¨çťă¨č¨č¨ăčĄăćšăăŻăăăŤĺŞăăŚăăžăăéĺćăăăťăšăcreated
ăžăăŻmounted
ăŞăŠă§éĺ§ăăăłăłăăźăăłăăăšăąăŤăăłć§é ăŤăăăăććŞăŽĺ ´ĺăŻAPIăăŚăźăśăźăŽć¨ŠéăčżăăŽăĺž
ă¤éăăšăăăźă ăŻăăăŤĺŞăăUXă§ăăăăłăłăăăźăŤăç ç˛ăŤăăăă¨ăŻăăăžăăă ăžăăVueăŻéĺćăŠă¤ăăľă¤ăŻăŤé˘ć°ăĺŚçăăăăăŽăłăźăăčż˝ĺ ăăĺż
čŚăăŞăăăăăăłăăŤăĺ°ăăäżă¤ăă¨ăă§ăăžăă ĺă¤ĺă¤ă
@seanfisherăăŞăăŻćĺšăŞăă¤ăłăăä¸ăăžăă ă˘ăźăăăŻăăŁçăŤč¨ăă°ăéĺćăŽă¤ăăłăăťăăăä¸ĺżă¨ăăč¨č¨ăŻăéçşč ăĺŚçăăĺż čŚăăăăžăăăăăăăĄăăťăźă¸ăćŁăă襨çžăăĺŻä¸ăŽćšćłă ăăă§ăă
ĺ 貏äşé ďźäťĽä¸ăŻăăăźă¸çćăŽčăćšăĺżľé ăŤç˝ŽăăŚć¸ăăăŚăăžăă ç§ăŽč°čŤăçĄĺšă§ăă確ăăŤćĺšăŞăŚăźăšăąăźăšăăăăžăă
ăă ăăéçşč ăŽăăśă¤ăłăăżăźăłăŽćąşĺŽăŻă使ç¨ăăŚăăăăŹăźă ăŻăźăŻăŤäťťăăăšăă§ăŻăăăžăăă ç§ăŽä¸ťĺźľăŻăăă§ăźăşăĺŽäşăăăŽăĺž ăŁăŚăăŞăăŽăŞăăăŞăç°ăŞăăă§ăźăşăăăăŽăââă¨ăăăă¨ă§ăă ăŞăăšăăźă¸ăä˝ćăăŚăăăăŚăłăăăăŽă§ăăďź ĺşćŹçăŤăăšăŚăä¸ĺşŚăŤčĄăăăŚăăĺ ´ĺăŻăä˝ćăăăăšăăźă¸ăĺŽĺ ¨ăŤçĄčŚăăŚăĺéĄăăăžăăă
ćĺéăăç§ăďźĺćăŽVue䝼ćĽďźä˝ćăŤĺ¤˘ä¸ăŤăŞăŁăăŽăŻăäżĄé źăăĺż čŚăŽăăVueăćł¨ĺ ĽăăŞăăă°ăŞăăŞăăŁăă¨ăă ăă§ăă-ăăăŻç§ăŽăăźă¸ăŽăťăăă˘ăăăăŹă¤ă˘ăŚăă¨ăŻä˝ăŽé˘äżăăăăžăăă§ăăă ăă ăăďźçăďźéĺćăżăšăŻăĺŽčĄăăăăŽăĺž ăăŞăăă°ăŞăăžăăă§ăăăăăăŻăăăźă¸ăăŹăłăăŞăłă°ăăăĺăŤďźFirebaseăŽčŞč¨źćšćłăŤăăăŻăăăŞăŠďźăŻăăăŤĺŞăăŚăăžăă ăăăä˝ćăăăăŚăłăăăĺăŤĺŽäşăăăŽăĺž ă¤ăă¨ă§ăăăăăźăŞĺéżçăŽĺż čŚć§ăĺŽĺ ¨ăŤć¸ăăăă¨ăă§ăăžăă
čŚăăŚăăăŚăă ăăăç§ăŽä¸ťĺźľăŻăVueăŻImăééăŁăŚéçşăăŚăăăă¨ăç§ăŤćăăŚăŻăŞăăŞăă¨ăăăă¨ă§ăă ĺż čŚăŞćŠč˝ăćäžăăă ăă§ăă
ăă ăăéçşč ăŽăăśă¤ăłăăżăźăłăŽćąşĺŽăŻă使ç¨ăăŚăăăăŹăźă ăŻăźăŻăŤäťťăăăšăă§ăŻăăăžăăă
ăăă¨...ăăŹăźă ăŻăźăŻăŻăéçşč ăçšĺŽăŽăăśă¤ăłăăżăźăłă¨ăăŠăŻăăŁăšăŤĺ ˇä˝çăŤĺśéăžăăŻăŹă¤ăăžăăŻăăăŹăźă ĺăăăăăăŤć§çŻăăăŚăăžăă ăăă彟ăăŽä¸ťăŞçŽçă§ăă ĺŞăăăăŹăźă ăŻăźăŻăŻăŠăăăšăăźăAPIăćäžăăžăăăăăŻăăăŹăźă ăŻăźăŻăćä˝ăăăăăŽć確ă§ćç˝ăŞćšćłăćŁç˘şăŤćäžăăžăăăăăă§ăĺśç´ăăăăžăă
ăŻăăăăŹăźă ăŻăźăŻăçšĺŽăŽćŠč˝ăćäžăăă¨ĺćăŤăéçşč ăçšĺŽăŽč¨č¨ććłăŤĺśç´ăăăă¨ăŻé誏çă§ăă ăăăăăăăăŹăźă ăŻăźăŻĺ ăŽćčŚăăăăĺŠăăăĺˇă¤ăăăăăĺŻč˝ć§ăăăĺ ´ćă§ăă éŠĺăŞăăŠăłăšăčŚă¤ăăăŽăŻéŁăăă§ăăVueă¨ăăăăEvană¨Vueéçşăăźă ăŻăăăăăŽĺ¤ćăä¸ăăăăŤç´ ć´ăăăäťäşăăăŚăăă¨ćăăžăă
ăšăłăă
éŠĺăŤč¨č¨ăăăăăŹăźă ăŻăźăŻăĺăăăśă¤ăłăăżăźăłă§ćĄĺźľăăĺż čŚăăăă¨ăŻćąşăăŚä¸ťĺźľăăžăăăăç§ăŽä¸ťĺźľăŻăăăŹăźă ăŻăźăŻăăăăć示ă§ăăŞăă¨ăăăă¨ă§ăă ăăŞăăŻćŁăăă§ăăăăăŹăźă ăŻăźăŻăăŠăăťăŠĺŞăăŚăăŚăăă¨ăłăéçşč ăŻĺ˝źăăćăăă¨ăä˝ă§ăăăăăăŤăŞăźăăłă§ăŞăăă°ăŞăăŞăă¨č¨ăŁăŚăăžăă
ăăăăä˝ćăăăłăăŚăłăăăăă¤ăăłăăéĺćăŤăăă¨ăă_ĺŽéăŽ_č°čŤăŤăŻč§ŚăăŚăăžăăăç§ăŽćčŚăŤăăŞăăŽćčŚăčż˝ĺ ăăă ăă§ăďźăăăŻééăă§ăŻăăăžăăďźăăăăŻä¸čŹăŤĺ¤§ăăŞčąçˇăŤă¤ăŞăăăžăă
éŠĺăŤč¨č¨ăăăăăŹăźă ăŻăźăŻăĺăăăśă¤ăłăăżăźăłă§ćĄĺźľăăĺż čŚăăăă¨ăŻćąşăăŚä¸ťĺźľăăžăăăăç§ăŽä¸ťĺźľăŻăăăŹăźă ăŻăźăŻăăăăć示ă§ăăŞăă¨ăăăă¨ă§ăă
çłă訳ăăăžăăăăăăăŻç§ăŤăŻćĺłăăăăžăăă ăŠăŽăăăŤćĄĺźľăăăăć示ăăŞăăăŹăźă ăŻăźăŻă1ă¤čŚăăŚăă ăăă
ăă¨ă´ăĄăłă¨ĺ ąĺă§čŻăĺ¤ćăä¸ăăă¨ăăăă¨ăăăç§ăŽćčŚă示ăăŚăăă¨ćăăžăăă ăăăăăăć確ăŤăăăăăŤă ăăŚăłăăăăłä˝ćăăăăŠă¤ăăľă¤ăŻăŤăăăŻăŻăéĺćă§ĺä˝ăăĺż čŚăŻăăăžăăăĺćă§ĺä˝ăăă¨ăăäşĺŽăŻăă˘ăăŞăąăźăˇă§ăłăă¸ăăŻăŤă¤ăăŚăŽć¨čŤăŤĺ˝šçŤăĄăžăă ă¨ăŤăăăĺž ćŠä¸ăăŻUIă§čć Žăăĺż čŚăăăăéĺćăłăźăăŻĺźăçśăĺăăăŻă§ĺŽčĄă§ăăžăă beforeMountăăăŻă¨mountăăăŻăĺż čŚăŤăŞăŁăăă¨ăŤă¤ăăŚč°čŤăăăă¨ăă§ăăžăă ăă ăăăłăłăă¤ăŤăăăăŹăłăăŞăłă°é˘ć°ăŽăăăŤăăăŚăłăćăŤĺż čŚăŞăăŽă1ă¤ă2ă¤ăăĺ ´ĺăăăăžăăăă¨ăă°ăä˝ćăăăăăŽă§ăŻăžă ă˘ăŻăťăšă§ăăžăăă
ăšăłăă
VueăéĺćăŠă¤ăăľă¤ăŻăŤăăăŻăŤă¤ăăŚä˝ăăăŽćčŚăćăŁăŚăăĺ ´ĺăăăăŻć¨ć¸ŹăŽĺéĄă§ăŻăăăžăăă VueăćĄç¨ăćäžăăžăăŻć¨ĺĽ¨ăăć¨ćşăAPIăăŹă¤ăăăăăłăăšăăăŠăŻăăŁăšăăăă¤ăăšăŚăŽäşşăŤčŞăăăăăŤăŞăăăć¨ć¸Źăăĺż čŚăŻăăăžăăă
EvanăŽćĺăŽĺçă§ăŻăéĺćăŠă¤ăăľă¤ăŻăŤăăăŻăŻć¨ćşAPIăŤĺŤăžăăŚăăžăăăăăăŻăĺż ăăăćŞăčăă§ăŻăŞăăĺŽčŁ ăŽăłăšăăćŁĺ˝ĺăăăŽăŤĺĺăŞăĄăŞăăăăŞăăăă§ăă
ä˝ăă辡ăăŁăŚăăăă¨ă示ăăă¨ăŞăăăŚăźăśăźăŤéĺćcreated
ăžăăŻäťăŽăŠă¤ăăľă¤ăŻăŤăăăŻăĺž
ăăăăŽăŻćŞăçżć
Łă§ăăă¨ăăćčŚăŤă¤ăăŚăŻăéĺćăăăŻăăľăăźăăăŚăăVueăäťă§ăŻĺ¤ĺĺéĄă解湺ăăďźăăăŚĺŽčŁ
ăç°ĄĺăŞďźăăă§ăźăşăăłăăŹăźăăă¨ĺźă°ăăăăŽăćäžăăžăă
ä˝ăă辡ăăŁăŚăăăă¨ă示ăăăŽăŞăăŤăéĺćăä˝ćăăăăăäťăŽăŠă¤ăăľă¤ăŻăŤăăăŻăăŚăźăśăźăŤĺž ăăăăŽăŻćŞăçżć Łă§ăăă¨ăăćčŚăŤă¤ăăŚăŻă
ăăăŻćŹĺ˝ăŤĺéĄă§ăăďź
ăšăłăă
ăăăç§ăćąăăŚăăĺéĄă§ă-ăăăŚăăăăŻĺéĄăăăăăăŤčŚăăăŽă§ă誰ăăç§ăăăăăŠăŽăăăŤčĄăăšăăăććĄăăăă¨ăă§ăăžăă
ç§ăăĄăŽVueă˘ăăŞăąăźăˇă§ăłďźăăŞă大ăăďźăŻVuexăĺşçŻĺ˛ăŤä˝żç¨ăăŚăăžăă createďźďźăŠă¤ăăľă¤ăŻăŤăŽVueăłăłăăźăăłăăŽăăŞăăŽć°ă§ăstore.dispatchďźďźăäťăăŚăšăă˘ĺ ăŽăăă¤ăăŽă˘ă¤ăă ăč¨ĺŽăăžăăďźćăăăŤďźă ăă ăăç§ăŽćł¨ćăĺźăăăŽă§ăstore.dispatchďźďźăŻăĺşăŤăŞăăă¸ăăŻă¨é˘ć°ăéĺćă§ăŞăĺ ´ĺă§ăă常ăŤpromiseăčżăăžăă ă ăăç§ăŻasynccreatedďźďź{await store.dispatchďź 'foo / action'ďź}ăĺ Ľăăžăăăăĺčż°ăŽăăăŤĺŽéăŤăŻĺ¤ąćăăžă..
ç§ăTypescriptă使ç¨ăăŚăăžăăăĺž ăŁăŚăăŞăă¨ăăŻăăŞăă˛ăŠăćĺĽăč¨ăăžă/ .thestore.dispatchďźďźăŻ..ăăăăźăăŁăłă°ăăăăăšăćăŁăŚăăžăă
ă§ăŻăVuex store.dispatchďźďźăéĺćăŤă§ăăŞăĺ ´ĺăŤăăŠă¤ăăľă¤ăŻăŤă§ä˝żç¨ăăăăăŽćčŻăŽćšćłăŻä˝ă§ăăăăă
äšžćŻďźďź
vueăŽçšĺŽăŽćčŚăŤé˘ăăäťăŽăăšăŚăŽč°čŤăăăăłăăŹăźă ăŻăźăŻăćčŚăčăŤç˝ŽăăšăăăŠăăăŤă¤ăăŚăŻăăăŽĺä˝ăăăć確ăŤćć¸ĺăăăă¨ăćçă§ăăĺŻč˝ć§ăăăăžăă
ä¸č¨ăŽ@fifmanăŽăăăăăŠăăăŞăă˝ăŞăĽăźăˇă§ăłăčŚăŚăăžăăăăăăĺéĄă解湺ăăăăŠăăăŻmounted()
ăćťăăžă§ăŤXHRă確ĺŽăŤăăźăă§ăăžăă ăăŽă˝ăŞăĽăźăˇă§ăłă§ăŻă created()
ă¨mounted()
严ćšăéĺćă§ăăăăăVueăŻăăăăăĺźăłĺşăăéĺćĺŚçăăăăŻă°ăŠăŚăłăă§ĺŽčĄăăăŚăăçść
ă§ăĺ¤ăăĺ°ăŞăăăăăŤćťăăžăă ĺŽéă createdPromise
ăĺťć˘ăă created()
ăžăăŻmounted()
ăăăăă§ăăšăŚăŽéĺćä˝ćĽăčĄăăăăă揥ăŽăăăŤăăăăŠăŽăăăŤĺŞăăŚăăăăŻăăăăžăăă
async mounted() {
let response = await fetch(my_url)
let data = await response.text()
my_data_member = data
}
ăăăăŤăăă my_data_member
mounted()
ăPromiseăčżăăĺžăXHRăĺŽäşăăă¨ă my_data_member
ăŻăĺžă§ăĺ
Ľĺăăăžăă
ăŤăźăăłăłăăźăăłă<div id="app"/>
ă§v-if
ă使ç¨ăăŚăăăźăżăŽčŞăżčžźăżăĺŽäşăăă¨ăăŤăăŞăŹăźăăăă¨ăă§ăăžăă ăă¨ăă°ăăŞăăŹăăˇăĽăăźăŻăłăŤä˝żç¨ăăžăă
ăăăŻăĺ¤ăăŽăŚăźăšăąăźăšăćă¤ĺŞăăćŠč˝ă§ăă ç§ăŽăŚăźăšăąăźăšă§ăŻăăłăłăăźăăłăăĺŽéăŤăŹăłăăŞăłă°ăăĺăŤăçšĺŽăŽAPIăăăăăŁăăăźăăăĺż čŚăăăăžăă ăă ăăăŠă¤ăăľă¤ăŻăŤăăăŻăŽéĺćăçćłçăŞă˝ăŞăĽăźăˇă§ăłă§ăăă¨ăŻćăăžăăă
çžĺ¨ă誰ăăăăă§éĺćé˘ć°ăăšă ăźăşăŤĺŽčĄăăăĺŽç§ăŞăˇăăŞăŞăŤă¤ăăŚč¨ĺăăŚăăžăă ăă ăăăă¨ăă°ăăŚăźăśăźăŽćĽçśăé ăăé ăăŚăăĺ ´ĺăAPIăŽĺżçĺžăŤăłăłăăźăăłăăăăŚăłăăăăăŽăĺž ă¤ă¨ăăłăłăăźăăłăăŽăŠă¤ăăľă¤ăŻăŤĺ ¨ä˝ăĺćŁăăăžăă čŞăżčžźăżć ĺ ąăăŚăźăśăźăŤčĄ¨ç¤şăăăă¨ăŻă§ăăžăăă ăăăŤćŞăăă¨ăŤăAPIăăżă¤ă ă˘ăŚăăăăă¨ăŠăźăčżăăăăăă¨ăă˘ăăŞăąăźăˇă§ăłăŻăăŚăłăăăăăŤăăłă°ăăžăă
ăăăŻĺŞăăćŠč˝ă§ăăăăăĄă¤ăłăă¸ăăŻăŽĺŽčŁ ă§ăŻăăăŹăźă ăŻăźăŻăăăĺşç¤ă¨ăŞăăă¸ăăŻăŤă¤ăăŚăŽć´ĺŻăĺ¤ăăĺŻä˝ç¨ăĺ°ăŞăăăăăăŹăźă ăŻăźăŻă§ăŻăŞăă˘ăăŞăąăźăˇă§ăłă§ĺŚçăăăă¨ăăĺ§ăăăžăă
ăăŽćŠč˝ăŽ+1ă
ăăžăăžăŞăłăłăăźăăłăă§ä˝żç¨ăăăăăăŻăšă¤ăłăăăăžăăăăăŻăšă¤ăłăŻăăăŚăłăăăăăăăŻăŽăăźăżăăźăšăăăăźăżăăă§ăăăăžăă
ăłăłăăźăăłăăŻăăăŚăłăăăăăăăŻă§ăăăăŻăšă¤ăłăŤăăŁăŚăă§ăăăăăăăźăżăĺŚçăăĺż
čŚăăăăžăă
çžĺ¨ăŽăăăŤăăăăŻăšă¤ăłăăăźăżăŽăăźăăçľäşăăă¨ăăŤĺźăłĺşăăăăłăźăŤăăăŻăĺŽčŁ
ăăăłăłăăźăăłăăŤăăŚăłăăăăăăăŻăç ´ćŁăăĺż
čŚăăăăžăăă
ăăăŻćŠč˝ăăžăăăăăŚăłăăăăăăăŻăç´ćăĺŚçăăĺ ´ĺăŻăăăăăăŤăŞăăžăă
@cederronăŻç´ç˛ăŤčĺłăăŞăăŽă§ăăă茪ăłăłăăźăăłăăŽăăźăżăăăŚăłăăźăăăŚĺ°éĺ
ˇă¨ăăŚć¸ĄăăŞăăŽăŻăŞăă§ăăďź v-if
ă使ç¨ăăŚăăăźăżăŽčŞăżčžźăżä¸ăŤčŞăżčžźăżă¤ăłă¸ăąăźăżăźă襨示ăăžăăăăźăżă襨示ăăăăăăłăłăăźăăłăă襨示ă§ăăžăăăłăłăăźăăłăăä˝ćăăăă¨ăĺż
čŚăŞăăšăŚăŽăăźăżăĺŤăžăăžăă
ăłăłăăźăăłăă2ă¤ăŽç°ăŞăçĄé˘äżăŞçść ă襨ăăă¨ăĺéżăăžăďźăăăźăżăăăźăăăăŚăăŞăăĺž ćŠä¸ăăăăłăăăźăżăăăźăăăăŚăăăćä˝ĺŻč˝ăďź
č¤ć°ăŽĺ ´ćă§ăă¸ăăŻăĺĺŠç¨ăăĺż čŚăăăĺ ´ĺăăăŚăłăăźăăă¸ăăŻăVuexăŤç§ťĺăăĺ ´ĺăăăăžăăăăźăżăŽăăŚăłăăźăăŻăăłăłăăźăăłăă§ăŻăŞăVuexă˘ăŻăˇă§ăłă§čĄăăăăăăăĄăăŁă¨ćĺłăăăăžăă
@ReinisVăąăźăšăĺç´ĺăăăăă¨ćăăžăăăłăłăăźăăłăăŻăăăăŻăšă¤ăłăŤăăŚăłăăăăăăăŻăŤăăŁăŚăă§ăăăăăăăźăżăăć°ăăăăźăżăä˝ćăăăłăłăăźăăłăăăĽăźăŻăăŽć°ăăăăźăżăŤăă¤ăłăăăăžăă
ăăăăŁăŚăăăăŻăšă¤ăłăŻăăźăżăăźăšăăăăźăżăăă§ăăăăĺż
čŚăăăăžă>ăłăłăăźăăłăăŻăăźăżăăźăšăăăăźăżăä˝ćăăžă>ăăă§ăłăłăăźăăłăă襨示ăăăžă
ăăăŻćŠč˝ăăžăăă
export const MyMixin = {
data: function () {
return {
dbData: null
}
},
mounted: async function () {
this.dbData = await asyncFetchDataFromDB()
}
}
export const MyComponent = {
mixins: [MyMixin],
data: function () {
return {
newData: null
}
},
mounted: function () {
this.newData = handleDBData(this.dbData)
}
}
ăłăłăăźăăłăăăŚăłăăăăŻă§ăŻădbDataăŻnullăŤăŞăăžăă
çžĺ¨ăăăăŻăšă¤ăłăăăźăżăăă§ăăăăă¨ăăŤăłăźăŤăăăŻăĺŽčĄăăžăăăăăŚăłăé˘ć°ăéĺćăŤăăćšăăăăă§ăă
ç§ăŻăăă使ç¨ăăŚăăŞăăŽă§ăvuexăŤă¤ăăŚĺ¤ăăč¨ăăă¨ăŻă§ăăžăă
@seanfisherăăăă§č¨ĺăăăă¨ăćŹĺ˝ăŤçš°ăčżăăăă¨ćăăžăă éĺćă¨ăăŚăăźăŻăăăăłăłăăźăăłăăvueă§ĺž ćŠăăăă¨ăăŚăźăśăźăŤĺéĄăçşçăăă ăă§ăŞăăasync / awaită使ç¨ăăŚăăźăżć¤ç´˘ăéĺ§ăăăăżăźăłăăăăă¨ăăăŤĺĺ¨ăăžăă ăăăăŽăŠă¤ăăľă¤ăŻăŤăăăŻăŽăłăźăăăvueăŽăăăăŻăć示çăŤĺéżăăăăăŤăäşćăăŞăç´ćăŤć示çăŤĺ¤ćăăăă¨ă埡ĺśăăžăă ĺ ´ĺăŤăăŁăŚăŻăăăčŻăăăăăăžăăăćŠč˝ăĺ°ĺ Ľăăăĺ ´ĺăŻă2ă¤ăŽăŠă¤ăăľă¤ăŻăŤăĺćăŤĺŽčĄăăăă¨ăććĄăăĺż čŚăăăăžăăçžĺ¨ăŽăŠă¤ăăľă¤ăŻăŤăŻăłăłăăźăăłăăăăŻăŽĺŽčĄăĺŚçăăăă1ă¤ăŻă°ăăźăăŤăłăźăŤăăăŻăŽĺŽčĄăĺž ćŠăăžăă
ăăăăvueăŽăăăăŻăĺéżăăăăăŤăăŠă¤ăăľă¤ăŻăŤăăăŻăŽăăšăŚăćĺéăć¸ăç´ăăă¨ăŤćŹĺ˝ăŤĺ¤ąćăăžăă async/await
ăŻăŻăăăŤăŻăŞăźăłăŞăŽă§ăpromiseăŻä˝żç¨ăăžăăă ä¸ä˝äşćć§ăŽăŞăćšćłă§ăăăĺ¤ć´ăăă¨ă夹ćăŽăăăăŽćĺăŽăăăďźĺž
ćŠăăăŚăăŞăăłăłăăźăăłăăŽăŠă¤ăăľă¤ăŻăŤďźăĺ¤ć´ăăăžăă
ćĺăăéĺćăŽĺ ´ĺăŽč¨çťă¨č¨č¨ăčĄăćšăăŻăăăŤĺŞăăŚăăžăăéĺćăăăťăšă
created
ăžăăŻmounted
ăŞăŠă§éĺ§ăăăłăłăăźăăłăăăšăąăŤăăłć§é ăŤăăăăććŞăŽĺ ´ĺăŻAPIăăŚăźăśăźăŽć¨ŠéăčżăăŽăĺž ă¤éăăšăăăźă ăŻăăăŤĺŞăăUXă§ăăăăłăłăăăźăŤăç ç˛ăŤăăăă¨ăŻăăăžăăă ăžăăVueăŻéĺćăŠă¤ăăľă¤ăŻăŤé˘ć°ăĺŚçăăăăăŽăłăźăăčż˝ĺ ăăĺż čŚăăŞăăăăăăłăăŤăĺ°ăăäżă¤ăă¨ăă§ăăžăă ĺă¤ĺă¤ă
@seanfisherăăăă¨ăăăăăŻ
䝣ăăăŤéĺćăłăłăăźăăłăă使ç¨ăăŞăăŽăŻăŞăă§ăăăéĺćăłăłăăźăăłăăŻăéĺćĺźăłĺşăăćťăŁăă¨ăăŤăŽăżăŹăłăăŞăłă°ăăăžăă
APIăŽčŠłç´°ăŻăăĄă
https://vuejs.org/v2/guide/components-dynamic-async.html#Async -Components
new Vue({
components: {
root: () => ({ // Aync component
// The component to load (should be a Promise)
component: new Promise(async function (resolve) {
await FetchMyVariables()
resolve(MyComponent) // MyComponent will be rendered only when FetchMyVariables has returned
}),
// A component to use while the async component is loading
loading: { render: (h) => h('div', 'loading') },
})
},
render: h => h('root')
})
ăăăăŽă˝ăŞăĽăźăˇă§ăłăŽăťă¨ăăŠăŻĺéĄăŞăăăăŤčŚăăžăăăăăăŻVueăŽä¸ťčŚăŞćŹ č˝é¨ĺăŽ1ă¤ă§ăăăé常ăŤç´ćçă§ăă async awaităŽä˝żç¨ăćĽĺ¸¸čśéŁŻäşăŤăŞăŁăŚăăăŽă§ăVue3ăŻăăăĺŽčŁ ăăĺż čŚăăăă¨ćăăžăă ăŠăă@ yyx990803ăăŞăă
ăăăĺ°éăăăŚăăŞăăă¨ă確čŞăăŚăłăźăăăŞăăĄăŻăżăŞăłă°ăăžăăăăăăŻăŤăŞăăăăéăăłăźăăĺşăŚăăžăă
ăŠă¤ăăľă¤ăŻăŤăĄă˝ăăăŽéĺćăľăăźăă訹ĺŻăăă¨ăăăăŠăŤăă§ćŞăUXăăŠăŻăăŁăšăĺŠéˇăăăăăăŤćăăăžăă ăŠăŽăăăŤďź éĺććŠč˝ăŻăăăăŤĺŽäşă§ăăŞăăŞăŻă¨ăšăďźéˇćéĺŽčĄăŞăŻă¨ăšăăăăăăŻăźăŻăŞăŻă¨ăšăăŞăŠďźăŤä˝żç¨ăăăžăă VueăŤăä˝ćăăăŚăłăăăžăăŻăăŽäťăŽăŠă¤ăăľă¤ăŻăŤăĄă˝ăăăŽăăăăăăăăăŻăźăŻčŚćąăžăăŻéˇćéĺŽčĄăăăéĺćăăăťăšă§ĺž ćŠăăăăăŤĺźˇĺśăăă¨ăăŚăźăśăźăŤéĄčăŞĺ˝ąéżăä¸ăăžăă ăŚăźăśăźăăľă¤ăăŤă˘ăŻăťăšăăăłăłăăźăăłăăăŚăźăśăźăŽăăăŽăăăťăŤćĽçśăăăăăŻăźăŻčŚćąăĺŽäşăăăŽăĺž ă¤éă犺ç˝ăŽçťé˘ă§4ç§éĺž ćŠăăĺż čŚăăăă¨ćłĺăăŚăă ăăă ăžăăăăăŻăŚăźăśăźăŤćŞĺ˝ąéżăä¸ăăă ăă§ăŞăăçśćłăŽĺśĺžĄăç ç˛ăŤăăžăăéçşč ă¨ăăŚăăŚăźăśăźăăăźăćéăčŞčă§ăăăăăŤăăăăé˛čĄçśćłă¤ăłă¸ăąăźăżăźă確ĺŽăžăăŻä¸ç˘şĺŽăŤčĄ¨ç¤şăăăăăăăăŤă§ăăăă¨ăŻä˝ăăăăžăăă ăăăăŁăŚăăăŽćŠč˝ăVueăŤçľăżčžźăăă¨ă§ăWebăăăčŻăĺ ´ćăŤăăăă¨ăŻă§ăăžăăă ăăŞăăŻćŞăçżć ŁăĺŻč˝ăŤăăŚăăă
ćĺăăéĺćăŽĺ ´ĺăŽč¨çťă¨č¨č¨ăčĄăćšăăŻăăăŤĺŞăăŚăăžăăéĺćăăăťăšă
created
ăžăăŻmounted
ăŞăŠă§éĺ§ăăăłăłăăźăăłăăăšăąăŤăăłć§é ăŤăăăăććŞăŽĺ ´ĺăŻAPIăăŚăźăśăźăŽć¨ŠéăčżăăŽăĺž ă¤éăăšăăăźă ăŻăăăŤĺŞăăUXă§ăăăăłăłăăăźăŤăç ç˛ăŤăăăă¨ăŻăăăžăăă ăžăăVueăŻéĺćăŠă¤ăăľă¤ăŻăŤé˘ć°ăĺŚçăăăăăŽăłăźăăčż˝ĺ ăăĺż čŚăăŞăăăăăăłăăŤăĺ°ăăäżă¤ăă¨ăă§ăăžăă ĺă¤ĺă¤ă
ć°ĺăŽćčŚă ăłăłăăźăăłăăŽăŹăłăăŞăłă°ăé ăăŚăăă¨ăăăˇăăŞăŞăăăă¸ăăŁăăŞăŚăźăśăźă¨ăŻăšăăŞă¨ăłăšă¨ĺ ąĺă§ăăă¨ăăăˇăăŞăŞăćłĺă§ăăŞăăăă¨ăăŁăŚăăăăĺĺ¨ăăŞăăă¨ăćĺłăăăăă§ăŻăăăžăăă
ăăŹăźă ăŻăźăŻăéçşč ă¨ćŚăĺ ´ĺăéçşč ăŻĺĽăŽăăŹăźă ăŻăźăŻăčŚă¤ăăă§ăăăă
@ robob4him
ć°ĺăŽćčŚă ăłăłăăźăăłăăŽăŹăłăăŞăłă°ăé ăăŚăăă¨ăăăˇăăŞăŞăăăă¸ăăŁăăŞăŚăźăśăźă¨ăŻăšăăŞă¨ăłăšă¨ĺ ąĺă§ăăă¨ăăăˇăăŞăŞăćłĺă§ăăŞăăăă¨ăăŁăŚăăăăĺĺ¨ăăŞăăă¨ăćĺłăăăăă§ăŻăăăžăăă
ăăŹăźă ăŻăźăŻăéçşč ă¨ćŚăĺ ´ĺăéçşč ăŻĺĽăŽăăŹăźă ăŻăźăŻăčŚă¤ăăă§ăăă
ăăŞăăŻçľśĺŻžăŤćŁăăă§ăăăăăă§ăăŞăăĺ ąćăăăăŽăŻăä˝ăăăŽćšćłă§ĺéĄă解湺ăăăăăŽćĺšăŞč°čŤă§ăŻăăăžăăă ăłăăĽăăăŁăŤćŠč˝ăŽéçşă埡ĺśăăăăăŽćăăăćŚčĄăĺ°ĺ Ľăăžăăă äźčŠąăŽĺťşč¨çăŞçśçśă§ăŻăăăžăăă
@wparad ăăăăŻçľśĺŻžăŤćăăăćŚčĄă§ăăă誰ăăŤä˝ăăăăăăă¨ăŻăăăžăăă ćŠč˝ăćŞăçżć Łăă˘ăłăăăżăźăłăăľăăźăăăŚăăăăžăăŻéçşč ăŽăă大ăăŞăłăăĽăăăŁăĺ´ŠĺŁăăăă¨ăăč°čŤăăăăă¨ăŻăĺăăăăŤćăăăćŚčĄă§ăă
ćĺéăăăăăăăŹăźă ăŻăźăŻ/č¨čŞăŽćŠč˝ăŽĺĺăŻéçşč ăŤă¨ăŁăŚĺąéşă§ăă ăăăŞăăŻăĄă˝ăăăŻćĄĺźľă§ăăVueăŻčŚç´ ďź$ elďźăŞăŠă¸ăŽă˘ăŻăťăšăć¨ĺĽ¨ăăžăă1ćĽăŽçľăăăŤéçşč ăäťäşăçľăăăăĺż čŚăăăăăăăăŹăźă ăŻăźăŻăŻăăăăćäžăăžăă
ăăŽćŠč˝ăŞăŻă¨ăšăăŻ1ĺš´ĺăŽăăŽă§ăă äşşă ăŻăăăŽççąăĺŽéăŤăŻćŞăçżć Łăĺźă辡ăăăăă§ăŻăŞăăăŹăłăăŞăłă°ăŽé ĺťśăćŞăçżć Łă¨ăăŚčŞčăăŚăŻăŞăăŞăăă¨ăç解ăăĺż čŚăăăăžăă
vueă§requirejsă使ç¨ăăĺż čŚăăăăžăă ç§ăŻrequirejsă弽ăă¨ăăăăă§ăŻăăăžăăăăăăšăŚăŽă˘ă¸ăĽăźăŤăAMDă˘ă¸ăĽăźăŤă¨ăăŚćă¤ăŞăźăăłă˝ăźăšăŽLMSă§vueă使ç¨ăăăăăă§ăă beforeCreateăăăŻăŤĺż čŚăŞăăšăŚăŽăŠă¤ăăŠăŞăăăźăă§ăăă°ç´ ć´ăăăă¨ćăăžăă çžćçšă§ăŽç§ăŤă¨ăŁăŚăŽäťŁćżć掾ăŻăăăăăvueăŽĺ¤ăŤăăźăăăŚăăăăăĺäťăŞĺ ´ćăŤć¸Ąăăă¨ă§ăă
ăŠă¤ăăľă¤ăŻăŤăĄă˝ăăăŽéĺćăľăăźăă訹ĺŻăăă¨ăăăăŠăŤăă§ćŞăUXăăŠăŻăăŁăšăĺŠéˇăăăăăăŤćăăăžăă ăŠăŽăăăŤďź éĺććŠč˝ăŻăăăăŤĺŽäşă§ăăŞăăŞăŻă¨ăšăďźéˇćéĺŽčĄăŞăŻă¨ăšăăăăăăŻăźăŻăŞăŻă¨ăšăăŞăŠďźăŤä˝żç¨ăăăžăă VueăŤăä˝ćăăăŚăłăăăžăăŻăăŽäťăŽăŠă¤ăăľă¤ăŻăŤăĄă˝ăăăŽăăăăăăăăăŻăźăŻčŚćąăžăăŻéˇćéĺŽčĄăăăéĺćăăăťăšă§ĺž ćŠăăăăăŤĺźˇĺśăăă¨ăăŚăźăśăźăŤéĄčăŞĺ˝ąéżăä¸ăăžăă ăŚăźăśăźăăľă¤ăăŤă˘ăŻăťăšăăăłăłăăźăăłăăăŚăźăśăźăŽăăăŽăăăťăŤćĽçśăăăăăŻăźăŻčŚćąăĺŽäşăăăŽăĺž ă¤éă犺ç˝ăŽçťé˘ă§4ç§éĺž ćŠăăĺż čŚăăăă¨ćłĺăăŚăă ăăă ăžăăăăăŻăŚăźăśăźăŤćŞĺ˝ąéżăä¸ăăă ăă§ăŞăăçśćłăŽĺśĺžĄăç ç˛ăŤăăžăăéçşč ă¨ăăŚăăŚăźăśăźăăăźăćéăčŞčă§ăăăăăŤăăăăé˛čĄçśćłă¤ăłă¸ăąăźăżăźă確ĺŽăžăăŻä¸ç˘şĺŽăŤčĄ¨ç¤şăăăăăăăăŤă§ăăăă¨ăŻä˝ăăăăžăăă ăăăăŁăŚăăăŽćŠč˝ăVueăŤçľăżčžźăăă¨ă§ăWebăăăčŻăĺ ´ćăŤăăăă¨ăŻă§ăăžăăă ăăŞăăŻćŞăçżć ŁăĺŻč˝ăŤăăŚăăă
ćĺăăéĺćăŽĺ ´ĺăŽč¨çťă¨č¨č¨ăčĄăćšăăŻăăăŤĺŞăăŚăăžăăéĺćăăăťăšă
created
ăžăăŻmounted
ăŞăŠă§éĺ§ăăăłăłăăźăăłăăăšăąăŤăăłć§é ăŤăăăăććŞăŽĺ ´ĺăŻAPIăăŚăźăśăźăŽć¨ŠéăčżăăŽăĺž ă¤éăăšăăăźă ăŻăăăŤĺŞăăUXă§ăăăăłăłăăăźăŤăç ç˛ăŤăăăă¨ăŻăăăžăăă ăžăăVueăŻéĺćăŠă¤ăăľă¤ăŻăŤé˘ć°ăĺŚçăăăăăŽăłăźăăčż˝ĺ ăăĺż čŚăăŞăăăăăăłăăŤăĺ°ăăäżă¤ăă¨ăă§ăăžăă ĺă¤ĺă¤ă
ăăŞăăč¨ăŁăŚăăăă¨ăŻă v-if/v-clock/v-show
ćŠč˝ăčż˝ĺ ăăă¨ćŞăçżć
ŁăĺŠéˇăăăăŽă§ăăăăăŽćŠč˝ăĺé¤ăăăă¨ă§ăăŹăźă ăŻăźăŻă確ĺŽăŤç˘şĺŽăŤăăăăăŞăăŽă§ăă 揥ăŤăč¤éăŞă˘ăăăźăă使ç¨ăăŚĺăăă¨ăčĄăăăăă3ă¤ăŽăăŁăŹăŻăăŁăăé
罎ăăŞăăăăŤVueăĺ°ăăăŞăăăăŤăăžăă ćĺăŽéçşč
ăŻćăă§ăŻăăăžăăă 2çŞçŽăŽăăźăŤăăŤăźăăŻăăăŹăźă ăŻăźăŻăŽä˝żăăăăăĺśéăăžăăăăăŻăćăăăŞăăăźăŤăăŤĺşăĽăăŚĺŽčĄă§ăăăă¨ăĺśéăăŚăăăăă§ăă çťé˘ĺ
¨ä˝ă犺ç˝ăŽăžăžăŤăăŚăéĺććä˝ă§Webăľă¤ăĺ
¨ä˝ăăăăăŻăăăăăŤWebăľă¤ăĺ
¨ä˝ăŤv-if
ăč¨ĺŽăăăŽăŻăŞăă§ăăďź
ăťă¨ăăŠăŽăŚăźăšăąăźăšă犺ç˝ăŽăăźă¸ă§ăăăŞăăăăăăŞăă¨ăăäşĺŽăăăŞăăŻçĄčŚăăŚăăă¨ćăăžăă ăăăăŻăççąăăăłăłăăźăăłăă¨ĺźă°ăv-if
ăăă¨ăă°async functions
ăŞăŠăĺ°éăăĺż
čŚăăăăžăă ç§ăŻăăăć˘ăăŚVueăăăĽăĄăłăĺ
¨ä˝ăăăăăćçľçăŤä¸č¨ăŽăăăŻăŽäžăŽăăăŤăăăťăŠăăăă§ăŻăŞăĺéżçă§ăăăčĄăăžăăă
ç§ăĺżé ăăŚăăăŽăŻčŞ°ă/ĺžă§ăăç§ăăłăźăăçśćăăŚăăăă¨ă§ăă ăăăŻăPromiseăłăźăŤăăăŻĺ°çvséĺćăŽăăăŞăăŽă§ă...ĺž ăŁăŚăă ăăă
ĺŽéăăăŹăźă ăŻăźăŻăŽćčťć§ă¨ĺśĺžĄć§ăç°ĄĺăŤăăŠăăźă˘ăăă§ăăăăăŤăŞăŁăŚăăă¨ćăăžăă ä¸č¨ăŽăăăŻăčŚăŚăç§ăä˝ăćĺłăăăŽăă確čŞăăŚăă ăăă éçşč
ăŻăăă¨ăă°ĺç´ăŞasync mounted () { await... }
ăšăăźăăĄăłăăŽăŽăŁăăăĺăăăăă ăăŤăăšăŚăŽăă¨ăčĄăŁăŚăăžăă ăăăăŽćŠč˝ă使ç¨ăăăăŞăĺ ´ĺăŻăé˘ć°ăasync
ă¨ăăŚĺŽçžŠăăŞăăă await
ăăžăŁăă使ç¨ăăŞăă§ăă ăăă
ĺŽéă async mounted
ăŠă¤ăăľă¤ăŻăŤăăăŻăĺŽéăŤä˝żç¨ăăäşşăŻăčŞĺăä˝ăăăŚăăăŽăăăŞăăăăčĄăăŽăăç解ăăŚăăĺŻč˝ć§ăéŤăăĺżé
ăăŚăăćŞăçżć
Łăä˝ăăŞăĺŻč˝ć§ăăăăžăă
@emahuni ăăăŞăăĺ
ąćăăŚăăćĺž
ăŤç°č°ăĺąăăäşşăŻăăŞăă¨ćăăžăăăăăĽă˘ăłăšăăăă¨ćăăžăăăăăŻasync mounted
ăžăăŻasync created
ăăłăłăăźăăłăăŽăŹăłăăŞăłă°ăé
ăăăă¨äťŽĺŽăăžăăăă ăăŽĺ ´ĺă茪ăŻä˝ăăăžăăďź ăăăăăžăăďź
v-if
ăăĺé¤ăăăăă¨ăćłĺŽăăŚăăžăăĺçăŤăăźăăăăăłăłăăźăăłăăŤé˘ăăćĺž ăŻä¸č˛ŤăăŚăăăă¨ăŤĺćăăžăăă茪ăŽĺä˝ăŻăăă§ăŻăŞăă¨ćăăžăă ăăŽăăăŞĺ ´ĺăIMOăĺăŽĺŽčŁ ă茪ăŤĺ Źéăă茪ăŤăăŽĺçăłăłăăźăăłăăăŠăĺŚçăăăăç解ăăăăă¨ăŤăŞăăžăă 䝣ăăăŤăăăźăżăŽăăźăćšćłă¨ĺăłăłăăźăăłăăŽçść ăŻĺ揥珏ă§ăăĺż čŚăăăăžăă éĺćăăăźăăăĺ ´ĺăŻăăăŽĺ ´ćă§ä˝ăăŹăłăăŞăłă°ăăĺż čŚăăăăďźăžăăŻăŹăłăăŞăłă°ăăŞăăďźăVueăŤčŞŹćăăćšćłăĺż čŚă§ăă ăăăĺŚçăăćčŻăŽćšćłăŻăć°ăăč¤éăăĺ°ĺ ĽăăăŽă§ăŻăŞăăăăŹăźă ăŻăźăŻăăă§ăŤćŠč˝ăăŚăăćšćłă§ăă
ăăăŤăç§ăŻăăŞăăŽč°čŤăŤĺŽĺ ¨ăŤăŻĺžăŁăŚăăžăăďź
ăăŞăăč¨ăŁăŚăăăă¨ăŻăv-if / v-clock / v-showćŠč˝ăčż˝ĺ ăăăă¨ăŻćŞăçżć ŁăĺŠéˇăăăŽă§ăăăăăŽćŠč˝ăĺé¤ăăăă¨ăŤăăŁăŚăăŹăźă ăŻăźăŻăăă確ĺŽăŤăăźăŤăăŤăźăăăăăăŞăăŽă§ă
ăăŽĺ ´ĺăăăŚăłăăĺž
ćŠăăŚăăăăžăăŻä˝ćăăăéĺćăłăłăăźăăłăăĺ°ĺ
Ľăăă¨ăćŞăçżć
Łăăăăv-if
ăŞăŠăŤăăŁăŚä˝ćăăăŚăăćŞăć
ŁčĄăçĽăŁăŚăăĺ ´ĺ...ăăăćŁĺ˝ĺă¨ăăŚä˝żç¨ăăăă¨ăăăŽă§ăŻăŞăăăăăăŽĺéĄăä˝ă§ăăăăć示çăŤďźăăĄăăĺĽăŽĺéĄă§ďźĺ
ąćăăăă¨ăăĺ§ăăăžăĺĽăŽč°čŤăŽăăăŤă
@emahuni ăăăŞăăĺ ąćăăŚăăćĺž ăŤç°č°ăĺąăăäşşăŻăăŞăă¨ćăăžăăăăăĽă˘ăłăšăăăă¨ćăăžăăăăăŻ
async mounted
ăžăăŻasync created
ăăłăłăăźăăłăăŽăŹăłăăŞăłă°ăé ăăăă¨äťŽĺŽăăžăăăă ăăŽĺ ´ĺă茪ăŻä˝ăăăžăăďź ăăăăăžăăďź
- ăăăăŻă
茪ăŻĺäžăĺž
ăăăŤĺ
ăŤé˛ăă§ăŹăłăăŞăłă°ăăăă¨ăă§ăăžăăăăŞăăăăĺż
čŚăŞăŽă§ăăďź ĺăăŹăłăăŞăłă°ăăă¨ăăăăŤĺŽčĄăăŚupdated
ăĺŽčĄă§ăăžăă
- ăłăłăăźăăłăăŽčŞăżčžźăżăĺŽäşăăăžă§ăăłăłăăźăăłăăDOM
v-if
ăăĺé¤ăăăăă¨ăćłĺŽăăŚăăžăă
ăăăĺĺžă§ăăăăŠăăăŻăăăăžăă...ăăăăçăăŻăăźă§ăăĺé¤ăăăă¨ăŻćłĺŽăăŚăăžăăăăăŚăłăä¸ăŤä˝ăăĺŽčĄăăĺż čŚăăăăăăŽéăŤăăăăŻăăŚăłăăăĺż čŚăăăăžăă ăăŽăăăŤä¸č¨ă§čŞăă ĺ¤ăăŽăŚăźăšăąăźăšăăăăžăă
- čŞăżčžźăżăĺŽäşăăăžă§ăłăłăăźăăłăăé襨示ăŤăŞăăă¨ăćłĺŽăăŚăăžă
ăăăŻăéçşč ăăăŚăłăăăăăăăŻăžăăŻăăŽäťăŽăăăŻăĺćăăŚăăççąăŤăăŁăŚç°ăŞăăžăă
- ăăŽĺ ´ćăŤä¸ćçăŞčŚç´ ă襨示ăăžăăďź
ăăă§ăŻăŞăăăăăăžăăă çš°ăčżăăžăăăăăăŻéçşč
ăä˝ăéćăăăă¨ăăŚăăăŽăăŤăăŁăŚç°ăŞăăžăă éčŚăŞăŽăŻăăšăăŹăźăă¸ăŁăąăăăŻä˝ăăăšăă§ăŻăŞăă¨ăăăă¨ă§ăă ăă¨ăă°ă v-if
ăč¨č¨ăăăă¨ăăăăăŻă誰ăăăłăłăăźăăłăăŽăŹăłăăŞăłă°ăćŻĺăăăăŻăăăççąă¨ă䝣ăăăŤä˝ăé
罎ăăŚăăăă ăžăĺăăŞăăăčăăăăă§ăŻăăăžăăă§ăăă éçşč
ăŽč¨č¨ăŤăăv-if
ăăžăăăăŞăăă¨ăăăăăăăăžăă ăăŽéăŤçťé˘ăŤä˝ă襨示ăăăăăĺżé
ăăĺż
čŚăŻăăăžăăăăăŹăźă ăŻăźăŻăĺżé
ăăĺż
čŚăŻăăăžăăă
ĺçăŤăăźăăăăăłăłăăźăăłăăŤé˘ăăćĺž ăŻä¸č˛ŤăăŚăăăă¨ăŤĺćăăžăăă茪ăŽĺä˝ăŻăăă§ăŻăŞăă¨ćăăžăă ăăŽăăăŞĺ ´ĺăIMOăĺăŽĺŽčŁ ă茪ăŤĺ Źéăă茪ăŤăăŽĺçăłăłăăźăăłăăăŠăĺŚçăăăăç解ăăăăă¨ăŤăŞăăžăă 䝣ăăăŤăăăźăżăŽăăźăćšćłă¨ĺăłăłăăźăăłăăŽçść ăŻĺ揥珏ă§ăăĺż čŚăăăăžăă éĺćăăăźăăăĺ ´ĺăŻăăăŽĺ ´ćă§ä˝ăăŹăłăăŞăłă°ăăĺż čŚăăăăďźăžăăŻăŹăłăăŞăłă°ăăŞăăďźăVueăŤčŞŹćăăćšćłăĺż čŚă§ăă ăăăĺŚçăăćčŻăŽćšćłăŻăć°ăăč¤éăăĺ°ĺ ĽăăăŽă§ăŻăŞăăăăŹăźă ăŻăźăŻăăă§ăŤćŠč˝ăăŚăăćšćłă§ăă
ĺčďźăăăĺŽčŁ ăăĺż čŚăăăăă¨ăŤĺćăăžăăăăăăŻăăŞăăĺŤăă§ăăăăăăŽč¤éăăĺ°ĺ ĽăăVue 3ă§ăŻăŞăăç ´ĺŁçăŞĺ¤ć´ăĺ°ĺ Ľăăăă¨ăăŤĺžă§čĄăăăĺŻč˝ć§ăăăă¨ĺ˝źăŻćăăŚăăžăă ă
ăăăŤăç§ăŻăăŞăăŽč°čŤăŤĺŽĺ ¨ăŤăŻĺžăŁăŚăăžăăďź
ăăŞăăč¨ăŁăŚăăăă¨ăŻăv-if / v-clock / v-showćŠč˝ăčż˝ĺ ăăăă¨ăŻćŞăçżć ŁăĺŠéˇăăăŽă§ăăăăăŽćŠč˝ăĺé¤ăăăă¨ăŤăăŁăŚăăŹăźă ăŻăźăŻăăă確ĺŽăŤăăźăŤăăŤăźăăăăăăŞăăŽă§ă
ăăŽĺ ´ĺăăăŚăłăăĺž ćŠăăŚăăăăžăăŻä˝ćăăăéĺćăłăłăăźăăłăăĺ°ĺ Ľăăă¨ăćŞăçżć Łăăăă
v-if
ăŞăŠăŤăăŁăŚä˝ćăăăŚăăćŞăć ŁčĄăçĽăŁăŚăăĺ ´ĺ...ăăăćŁĺ˝ĺă¨ăăŚä˝żç¨ăăăă¨ăăăŽă§ăŻăŞăăăăăăŽĺéĄăä˝ă§ăăăăć示çăŤďźăăĄăăĺĽăŽĺéĄă§ďźĺ ąćăăăă¨ăăĺ§ăăăžăĺĽăŽč°čŤăŽăăăŤă
async...
ăŤă¤ăăŚč¨ăŁăŚăăăŽă¨ĺć§ăŤăăłăłăăźăăłăăŽăŹăłăăŞăłă°ăăăăăŻăăăăăŤčޤăŁăŚä˝żç¨ăăăĺŻč˝ć§ăŽăăćŠč˝ăŽäžă¨ăăŚăăăăăŽăăŁăŹăŻăăŁăăććăăă ăă§ăă 彟ăăŤăŻä˝ăŽĺéĄăăăăžăăă ă§ăŻă誰ăăăćŞăçżć
Łăă使ăŁăŚçŠşç˝ăăźă¸ă1ĺé襨示ăăăłăłăăźăăłăăä˝ćă§ăăă¨ăăççąă ăă§ăăăăăŽăăŁăŹăŻăăŁăăĺé¤ăăĺż
čŚăăăăžăăďź ă˛ăŠăăăăŤććŞăŽäžăćăăăă¨ăăŞăéăăĺŽéăŤăŻăăă辡ăăăŞăăŽă§čŞ°ăăăăăăŚăăăŽăčŚăžăăă
éčŚăŞăŽăŻăăžă ăŚăźăšăąăźăšăčŚĺ˝ăăăŞăĺ ´ĺăŻăäťăŽäşşăăăăă˛ăŠă使ç¨ăăă¨ăŻč¨ăăŞăă§ăă ăăăăăăăŁăŚăăăăčĄăăšăă§ăŻăăăžăăă ćŞăçżć ŁăŻçĄçĽăŽĺéĄă§ăăăçĄçĽăŞäşşăŻăăăăŽćŠč˝ăĺŽĺ ¨ăŤä˝żç¨ăăăă¨ăŻćąşăăŚăăăžăăă
誰ăăăăŽhttps://github.com/vuejs/vue/issues/7209#issuecomment-424349370ăĺ°ăăžăăăăç§ăčŚăéăă§ăŻčŞ°ă彟ăŤçăăžăăă§ăăă ăăăŻăVueăăăŽé¨ĺă§é ăăĺăŁăŚăăăă¨ăçăŤç¤şăăŚăăžăă ă˘ăźăăăŻăăŁăŽăăŽé¨ĺăŻăéĺćăăžă ĺéĄăŤăŞăăŞăă¨ăăŤč¨č¨ăăăžăăă ăăăăŁăŚăćć°ăŽă˘ăźăăăŻăăŁăŽćć°ăŽčŚäťśăćşăăăăăŤć´ć°ăăăă¨ăŻă確ăăŤčŻăčăă§ăă ăă䝼ĺ¤ăŽĺ ´ĺăćŽăăŻăăăŻă§ăăăćĽçă§čľˇăăŁăŚăăăă¨ăčĄăăŽă§ăŻăŞăăăăăčĄăăăăŽçšĺŽăŽćšćłăĺż čŚă¨ăăĺéżçă§ăă
ăă ăăăžă ăăăăžăăăăć°ăăćŠč˝APIăä¸çŽă§čŚăă¨ăĺŽéăŤăăăĺŻč˝ă§ăăăăăŤćăăăžăă ćŠč˝çă§ăăăăăéĺćăŠă¤ăăľă¤ăŻăŤăăăŻăŞăŠă厢茳çăŤĺŽčĄă§ăăŞăăŁăçšĺŽăŽăă¨ăĺŽčĄă§ăăăă¨ăćĺłăăžăă
éčŚăŞăŽăŻăăžă ăŚăźăšăąăźăšăčŚĺ˝ăăăŞăĺ ´ĺăŻăäťăŽäşşăăăăă˛ăŠă使ç¨ăăă¨ăŻč¨ăăŞăă§ăă ăăăăăăăŁăŚăăăăčĄăăšăă§ăŻăăăžăăă ćŞăçżć ŁăŻçĄçĽăŽĺéĄă§ăăăçĄçĽăŞäşşăŻăăăăŽćŠč˝ăĺŽĺ ¨ăŤä˝żç¨ăăăă¨ăŻćąşăăŚăăăžăăă
ăăŽçšăććăăăă¨ăŻăăăžăăăăłăłăăźăăłăăŽăŹăłăăŞăłă°ăăăăăŻăăăă¨ăŞăăăăăŠăŤăă§éĺćă˘ăŻăˇă§ăłăĺŽčĄăăăă¨ăăçšăććăăŚăăžăă mounted
ăžăăŻcreated
ăăăăŻă§async
ă˘ăŻăˇă§ăłăĺŽčĄăăă¨ăăłăłăăźăăłăăŽăŹăłăăŞăłă°ăé
ăăăŽăŻç´ćçă§ăŻăăăžăăă ăăăäşĺŽă§ăăă¨äťŽĺŽăăă¨ă䝣ăăăŤăçžĺ¨ăŽćŠč˝ăćăă§ăăćśč˛ťč
ăăŠăŽăăăŤé˛ăăăŤăăŁăŚč¤éăăçăăăă¨ăăăăăžăă ăăăžă§ăŽč°čŤăŻăćąăăăăŚăăăă¨ăŻă§ăăŞăă¨ăăăă¨ă§ăŻăŞăăćąăăăăŚăăăă¨ăăăăŠăŤăă§ăăăšăă ă¨ăăăă¨ă§ăă v-if="loaded"
ĺşăĽăăŚčĄ¨ç¤şăăăăăłăăŹăźăăĺăćżăăăă¨ă§ăăłăłăăźăăłăăŽăŹăłăăŞăłă°ăăă§ăŤăăăăŻă§ăăžăă
çžĺ¨ăăłăźăăăăăăŻăăăŤăŹăłăăŞăłă°ăăăŤăŻă揥ăŽăăăŤăŞăăžăă
çžĺ¨ăăăŽăłăźăăŻćŹĄăŽă¨ăăă§ăă
<template>
<div>
<spinner v-if="!loaded">
<div v-else>
....
</div>
</template>
<script>
async created() {
await this.loadData();
this.loaded = true;
}
</script>
ăžăăĺŽéăŤăăăăŻăăăă¨ăŻă§ăăŞăăăăăăăăŻă使ç¨ăăŚăŹăłăăŞăłă°ăăăă¨ăŻăžăŁăăĺăăăăŤčŚăăžăă async created()
ĺŽéăŤăłăłăăźăăłăăăăăăŻăăă¨äťŽĺŽăăžăă 揥ăŤăăłăźăăĺé˘ăăžăă ăšăăăźă襨示ăăăŤăŻă揥ăŽăăăŤč¨čż°ăăžăă
<template>
<div>
<spinner v-if="!loaded">
<div v-else>
....
</div>
</template>
<script>
created() {
this.loadData().then(() => this.loaded = true);
}
</script>
ä˝ćăăçťé˘ă§ăŽăłăłăăźăăłăăŽăŹăłăăŞăłă°ăŻçĄčŚăăŚăă ăă
<template>
<div>
<div>
....
</div>
</template>
<script>
async created() {
await this.loadData();
}
</script>
ăŹăłăăŞăłă°ăăăăăŻăăăăăŤăăŽĺç´ĺăčż˝ĺ ăăă¨ăăăăăŻăăăč¤éăŤăăŞăăă¨ăäżč¨źăăăă¨ăăĺŠçšăŻä˝ă§ăăďź ç§ăŻăăăčŚăŚăăžăăă
@ yyx990803ăăăčŚăŚăă ăăăĺŽç§ă§ăŻăăăžăăăăăăă§ăč¤éăŞăŚăźăšăąăźăšăŽăˇăźăłă§ăă
ăŠă¤ăăľă¤ăŻăŤăăăŻăŤéĺćăăăŁăĺ ´ĺăŤă¨ăŹăŹăłăăŤĺŚçă§ăăĺŻč˝ć§ăŽăăăŚăźăšăąăźăšă揥ăŤç¤şăăžă...ĺž
ćŠďź
_ç§ăŻĺŽéăŤă˘ăăŞă§ăăăĺŽčĄăăăă¨ćăŁăŚăăžăăăăăăăĺŽçžăăăăăŤéăăłăźăăĺ
Ľćăăžăăă ăăăŻcoz_ăŽé常ăŤä¸čŞçśăŞäžă§ă
ăłăłăăźăăłăB && CăŽmounted
ăăăŻă辡ĺăăăŽăĺž
ăŁăŚăăămounted
ăŻăăăŽcreated
ăăăŻăĺž
ćŠăăĺż
čŚăăăăžăăăăăŤăăăăăŞăŹăźăĺž
ćŠăăŚăăăłăłăăźăăłăB && CăŽăăŚăłăăăăŞăŹăźăăăžăă_ďźĺž
ćŠăăĺăŤĺŽéăŤä˝ăăĺŽčĄă§ăăžăďź_ă é˘äżăăăłăłăăźăăłăăŽăăšăŚă1ă¤ăŽĺ ´ćăŤă¨ăŠăžăăăăăăŽćšćłăŽćšăç°Ąĺă§ăăŻăăăŤăŻăŞăźăłă§ç´ćçă§ăă
AăŻăăŞăŹăźă¤ăăłăăçşčĄăă Bă¨CăăăŽĺżçăăŞăăšăłăăžă_ďź Bă¨CăŻçśčĄăăĺăŤAăŽäżĄĺˇăĺž ćŠăăăăŚăłăăăăă¨ă¤ăăłăăçşčĄăăžăďź_çśčĄăăĺăŤĺç´ă§ăă ăăăŻăçść 玥çăŽăăăŤäťăŽĺ ´ćăŤçĄé˘äżăŞăăźăżăćŁăă°ăŁăŚăăŞă
ăĄă¤ăłăăšăăŁăłă°ăłăłăăźăăłăăăăšăŚăŽăłăłăăźăăłăăä¸çˇăŤăăźăăăăžăăăă¤ăăłăă¨éĺćă使ç¨ăăŚéŠĺăŞăłăłăăźăăłăăĺž ăĄăžă...ĺž ăŁăŚăă ăăă ăăăŻăăăăŽĺäžăăĄăä˝ăăăăăăăžăć°ăŤăăžăăă彟ăăŻĺ˝źăčŞčşŤă注ćăăžăă
<template>
<div>
...
<component-A/>
<component-B/>
<component-C/>
... other conent
</div>
</template>
<script>
import ComponentA...
...
export default {
components: { ComponentA... }
}
</script>
ăłăłăăźăăłăAăŻăäžĺé˘äżă¨ăăŚBă¨CăŽăăŚăłăăĺśĺžĄăăžăă ăăŞăŹăźăŻăĺžă§äťăŽăăăŻă§ĺŽčĄăăăă¨ăăĺăăłăłăăźăăłăăŽUXă¤ăăłăăäťăăŚĺŽčĄăăăă¨ăă§ăăžăă 䝼ä¸ăŻăăăă§ă˘ă¤ăă˘ăćŤé˛ăăăăăŽăăŽă§ăă
<template>
...
</template>
<script>
export default {
async created() {
// ...do something here before mounting thrusters, even await it
this.root.$emit('mount-thrusters');
await Promise.all([
this.wasMounted('thruster-1-mounted'),
this.wasMounted('thruster-2-mounted')
]);
},
mounted() {
// will only run after components B and C have mounted
...
},
methods: {
wasMounted(compEvent) {
return new Promise( (resolve)=>this.root.$once(compEvent, ()=>resolve()));
}
}
}
</script>
ăłăłăăźăăłăB
<template>
...
</template>
<script>
export default {
async created() {
// ...do something here, even await it, but happens at the same time as all components
await new Promise( (resolve)=>this.root.$once('mount-thrusters', ()=>resolve()));
},
mounted() {
this.root.$emit('thruster-1-mounted');
}
}
</script>
ăłăłăăźăăłăC
<template>
...
</template>
<script>
export default {
async created() {
// ...do something here, even await it, but happens at the same time as all components
await new Promise( (resolve)=>this.root.$once('mount-thrusters', ()=>resolve()));
},
mounted() {
this.root.$emit('thruster-2-mounted');
}
}
</script>
ä¸č¨ăŽăłăźăăŻăéč¤ăăăłăźăăšăăăăăăăăăăăăă¨ă確čŞăăăăăŤăăăŻăšă¤ăłă使ç¨ăăăă¨ă§ăăăŤç°ĄçĽĺă§ăăžăăć確ăŤăăăăŁăă ăă§ăă wasMountedăĄă˝ăăăŻăăăăŻăšă¤ăłă§çźśčŠ°ăŤăăŚă3ă¤ăŽăłăłăăźăăłăăăšăŚă§ä˝żç¨ă§ăăžăă
ăăă§ăŻăăžăŁăăĺăăă¨ăĺśĺžĄăăăăăŤäťăŽĺ ´ćăŤćŁăă°ăŁăŚăăäťăŽăăăŻăăŤăźăżăźăłăźăăŞăă§ăĺăłăłăăźăăłăăä˝ăćĺž ăăŚăăăŽăăć確ăŤç˘şčŞă§ăăžăă ăăŽćŠč˝ăŞăă§ĺŽéăŤăăăčĄăăŽăŻé常ăŤćˇˇäšąăăžăăç§ăă˘ăăŞă§ăăăčĄăŁăă¨äżĄăăŚăă ăăă
ăăăŻćăăăŤăä¸ĺż čŚăŤč¤éă§äżĺŽä¸ĺŻč˝ăŞăłăźăăĺăé¤ăăžăă
ĺä˝ăç°ăŞă32ĺăŽăšăŠăšăżăźăłăłăăźăăłăăĺăă大čŚć¨ĄăŞă˘ăăŞă§ăăăćłĺăăŚăżăŚăă ăăă ĺżăŤçăăŚăăăšăăă¤ăłăăŻç´3ă¤ă ăă§ăăăăăŻăăăăŻăšă¤ăłăćĺ Ľăăĺ ´ĺă§ă2ă¤ăŤć¸ăăăă¨ăă§ăăžăă
cozăŽĺ ´ĺăăăăŻăăŚăłăăăăłä˝ćăŤéĺŽăăăă ăă§ăŞăăĺŽéăŤăŻäťăŽăăšăŚăŽăŠă¤ăăľă¤ăŻăŤăăăŻă§ćŠč˝ăăăŻăă§ăă ăăăĺ
沢ăŽăăć°ăăbeforeActivate
/ beforeUpdate
ăăăŻăŤăăă¨ćłĺăăŚăżăŚăă ăăă ç§ăăĄăŻăăłăłăăźăăłăăä˝ăăă¨ăă§ăăăŽawait _activation / update_ăŽăż_activate / update_ăŞăăŹăăˇăĽăŻăăłăłăăźăăłăă_activated / updated_ăăăăăłăŤĺŽčĄăăăă¨ăăŤă çŠäşăć°éŽŽăŞăžăžă§ăăăă¨ă確čŞăăžăă
ăăăĺŽčŁ ăăăă¨ăăŞăšăăŻçĄéăŤăŞăăžăă
éčŚăŞăŽăŻăăžă ăŚăźăšăąăźăšăčŚĺ˝ăăăŞăĺ ´ĺăŻăäťăŽäşşăăăăă˛ăŠă使ç¨ăăă¨ăŻč¨ăăŞăă§ăă ăăăăăăăŁăŚăăăăčĄăăšăă§ăŻăăăžăăă ćŞăçżć ŁăŻçĄçĽăŽĺéĄă§ăăăçĄçĽăŞäşşăŻăăăăŽćŠč˝ăĺŽĺ ¨ăŤä˝żç¨ăăăă¨ăŻćąşăăŚăăăžăăă
ăăŽçšăććăăăă¨ăŻăăăžăăăăłăłăăźăăłăăŽăŹăłăăŞăłă°ăăăăăŻăăăă¨ăŞăăăăăŠăŤăă§éĺćă˘ăŻăˇă§ăłăĺŽčĄăăăă¨ăăçšăććăăŚăăžăă
mounted
ăžăăŻcreated
ăăăăŻă§async
ă˘ăŻăˇă§ăłăĺŽčĄăăă¨ăăłăłăăźăăłăăŽăŹăłăăŞăłă°ăé ăăăŽăŻç´ćçă§ăŻăăăžăăă ăăăäşĺŽă§ăăă¨äťŽĺŽăăă¨ă䝣ăăăŤăçžĺ¨ăŽćŠč˝ăćăă§ăăćśč˛ťč ăăŠăŽăăăŤé˛ăăăŤăăŁăŚč¤éăăçăăăă¨ăăăăăžăă ăăăžă§ăŽč°čŤăŻăćąăăăăŚăăăă¨ăŻă§ăăŞăă¨ăăăă¨ă§ăŻăŞăăćąăăăăŚăăăă¨ăăăăŠăŤăă§ăăăšăă ă¨ăăăă¨ă§ăăv-if="loaded"
ĺşăĽăăŚčĄ¨ç¤şăăăăăłăăŹăźăăĺăćżăăăă¨ă§ăăłăłăăźăăłăăŽăŹăłăăŞăłă°ăăă§ăŤăăăăŻă§ăăžăăçžĺ¨ăăłăźăăăăăăŻăăăŤăŹăłăăŞăłă°ăăăŤăŻă揥ăŽăăăŤăŞăăžăă
çžĺ¨ăăăŽăłăźăăŻćŹĄăŽă¨ăăă§ăă<template> <div> <spinner v-if="!loaded"> <div v-else> .... </div> </template> <script> async created() { await this.loadData(); this.loaded = true; } </script>
ăžăăĺŽéăŤăăăăŻăăăă¨ăŻă§ăăŞăăăăăăăăŻă使ç¨ăăŚăŹăłăăŞăłă°ăăăă¨ăŻăžăŁăăĺăăăăŤčŚăăžăă
async created()
ĺŽéăŤăłăłăăźăăłăăăăăăŻăăă¨äťŽĺŽăăžăă 揥ăŤăăłăźăăĺé˘ăăžăă ăšăăăźă襨示ăăăŤăŻă揥ăŽăăăŤč¨čż°ăăžăă<template> <div> <spinner v-if="!loaded"> <div v-else> .... </div> </template> <script> created() { this.loadData().then(() => this.loaded = true); } </script>
ä˝ćăăçťé˘ă§ăŽăłăłăăźăăłăăŽăŹăłăăŞăłă°ăŻçĄčŚăăŚăă ăă
<template> <div> <div> .... </div> </template> <script> async created() { await this.loadData(); } </script>
ăŹăłăăŞăłă°ăăăăăŻăăăăăŤăăŽĺç´ĺăčż˝ĺ ăăă¨ăăăăăŻăăăč¤éăŤăăŞăăă¨ăäżč¨źăăăă¨ăăĺŠçšăŻä˝ă§ăăďź ç§ăŻăăăčŚăŚăăžăăă
ăăăŻVue101ăăźăăăŁăłăă§ăăăăăăŤć°ăăăăŽăŻä˝ăăăăžăă...ăă¨ăă°ä¸č¨ăŽăąăźăšăăŤăăźăăăŽăŤĺĺă§ăŻăăăžăăă ăăă§ăŽčăćšăŻăVueăĺŽéăŤä˝żç¨ăăăŚăăăŚăźăśăźăŠăłăăŽč¤éăăčť˝ć¸ăăăłăźăăŤă¤ăăŚć¨čŤăăăăăăăă¨ă§ăă
ăăă§ăŽăŹăłăăŞăłă°ăŻĺéĄă§ăŻăăăžăăăĺŽéăŤéčŚăŞăŽăŻăăŹăłăăŞăłă°ăŽĺăŤčľˇăăŁăŚăăăă¨ă§ăă ăłăłăăźăăłăăçśčĄăžăăŻăŹăłăăŞăłă°ăăĺăŤăčŞçąăŤćä˝ă§ăăăăăŤăăžăă ă¨ăŤăăăăăăăŹăłăăŞăłă°ăŽăăăăŻă¨ăŻăžăŁăăé˘äżăăăžăăă VueăăľăăźăăăăŠă¤ăăľă¤ăŻăŤăăăŻăŻăăăăăăăäťăŽăăăŻăŤĺŻžăăŚéĺćăłăźăăĺŚçăăćšćłăăăă°ăăăăăŻĺŽéăŤĺ˝šçŤă¤ĺŻč˝ć§ăăăăžăă ă˘ă¤ăă˘ăŻă揥ăŽăăăŻé˘ć°ăŤé˛ăĺăŤăVueăĺ é¨çăŤéĺćăĺ°éăăăă¨ă§ăă
ç§ăŻăăăŤćŹĺ˝ăŤćˇˇäšąăăŚăăžăăBă¨CăAăŤçľĺăă䝣ăăăŤăăłăźăă秝ĺăăŚăAăA.jsăŤăăźăăăăŚăăăA.jsăŤăB.dataăă¨ăC.dataăăć´ć°ăăăžăă ă ăăăăă°ăä˝ăăăŽççąă§A.dataăĺ¤ć´ăăăĺ ´ĺăäťăŽăłăłăăźăăłăăŻĺ§äťťăăăă¨ăăăŽă§ăŻăŞăăčŞĺçăŤĺăŹăłââăăŞăłă°ăăăžăă
ăăăłăłăăźăăłăăăĺĽăŽăłăłăăźăăłăă¸ăŽĺśĺžĄă ĺ
ąćăăăŚăăĺ ´ĺă§ăăăăźăżăĺăé˘ăăŚAăăłăłăăźăăłăAăăăŹăłăăŞăłă°ăăžăă fetchDataăhasInitializedăŞăŠăŽăĄă˝ăăăĺŤăĺä¸ăŽăŻăŠăšă使ç¨ăăžăăăĺžč
ăŻpromiseă§ăăăĺč
ăŻĺžč
ă解湺ăăžăă
ăłăłăăźăăłăăç´ćĽçľĺăăă¨ăäşćăăŞăäžĺé˘äżăăŞăźăä˝ćăăăăłăłăăźăăłăăĺĺŠç¨ă§ăăŞăăŞăăvueăăłăłăăźăăłăăćŁăăĺăŹăłăăŞăłă°ă§ăăăăăŤăŞăăžăă
ăžăăŻăă°ăăźăăŤăšăłăźăă§ăŻăŞăăAăBăCăŽčŚŞăŤç´ćĽă¤ăăłăăemit
ăŚăBă¨CăăŹăłăăŞăłă°ăăăăŠăăă茪ăŤćąşĺŽăăăžăă
<template>
<a-component @rendered="showBandC = true" />
<b-component v-if="showBandC" />
<c-component v-if="showBandC" />
</template>
ăăŽĺ ´ĺăBă¨CăăŹăłăăŞăłă°ăăĺăŤĺŽéăŤăŹăłăăŞăłă°ăăĺż
čŚăăăăŽăŻAăŤă¤ăăŚä˝ă§ăăă created()
ăĄă˝ăăăŤä˝ăăăăĺ ´ĺăăăăjavascriptăŻăŠăšăäťăăŚăšăă˘ăŤăăźăżăĺ
Ľĺăăăstore
ă˘ă¸ăĽăźăŤă使ç¨ăăăăăăă¨ă匨ăăăăŽăŻä˝ăăăăžăăă ăăăăć示çăŞăŚăźăšăąăźăšăŽćšă彚çŤă¤ă§ăăăăă¤ăžăăăăŁăăăŁă§ăăŞăăŚăźăśăźăšăăźăŞăźăŽUXăŻä˝ă§ăăďź
ă˘ă¤ăă˘ăŻă揥ăŽăăăŻé˘ć°ăŤé˛ăĺăŤăVueăĺ é¨çăŤéĺćăĺ°éăăăă¨ă§ăă
ăăŽé¨ĺăŻçăŤăăŞăŁăŚăăăă¨ăŻç˘şăă§ăăăăŞăäžăč¤éăŤăăĺż čŚăăăăŽăââăăăăžăăăăŞăăăŽăŚăźăśăźăšăăźăŞăźăŽăăăŞăă¨ăč¨ăŁăŚăŻăăăŞăăŽă§ăăăăă
ç§ăŽăłăłăăźăăłăăŤăŻasync beforeMount
ă¨async mounted
严ćšăăăăžăăă beforeMount
ăŽăłăźăăĺŽäşăăĺăŤă mounted
ăŽăłăźăă辡ĺăăŚăăžăă beforeMount
ăĺŽäşăăĺăŤă mounted
辡ĺăăăăăŻăăăŤăŻăŠăăăă°ăăă§ăăďź
ăăăŻĺ ăŽăŞăŻă¨ăšăăŽăăăŞăăŽăŞăŽă§ă2çŞçŽăŽĺżçă§ĺşăăă質ĺăŻăžă é˘éŁăăŚăăă¨ćăăžăďź https ďź
ă¨ăăăăçˇ ăăăăăžăăăăăĺ ˇä˝çăŞççą/ăŚăźăšăąăźăš/役éżăŤă¤ăăŚăăŠăăźă˘ăăăăŚăă ăăă
䝼ĺăŤĺŽčĄăăăăŠă¤ăăľă¤ăŻăŤăăăŻăăăăăŻăăĺż čŚăăăă¨ăăĺŽéăŽćĺšăŞăŚăźăšăąăźăšăŻăăăžăăăăăă¨ăăŠă¤ăăľă¤ăŻăŤăăăŻăĺćăăăŽăŻćŁăăă§ăăă ăăăžă§ăŽă¨ăăăč°čŤăŻćŹčłŞçăŤĺ˛ĺŚçă§ăăďźĺŞăăă˘ăźăăăŻăăŁăŽč°čŤăčĄăĺžĺăăăăăăŤďźăăĺŽéăŽĺéĄăŻăăăăčĄăĺŽéăŽćŁĺ˝ăŞççąăăăăăŠăăă§ăă ăăŹăźă ăŻăźăŻăéĺćăłăźăăĺž ă¤ăă¨ăĺççă§ăăăă¨ăŻä¸çŹçăăžăăă ăăăčĄăăŞăăŁăăăžăăŻăłăźăŤăăăŻă渥ăăŞăăŁăďźăžăăŻăłăźăŤăăăŻă渥ăăăăłăźăŤăăăŻăŤăłăźăŤăăăŻă渥ăăŞăăŁăďźäťăŽNĺăŽăŠă¤ăăŠăŞă§ćŁç˘şăŞĺéĄăçşçăăžăăă ăă ăăéĺćăŠă¤ăăľă¤ăŻăŤăăăŻă使ç¨ăăăă¨ăŻĺŽéăŤăŻĺççă§ăăăăăă¨ăăĺŽčĄăăšăă§ăŻăŞăăăă¨ăĺŽčĄăăăă¨ăăçľćăŽççąă§ăăďź
ă¤ăžăă created
ăŤăŞăŁăŚăăŞăăłăłăăźăăłăăunmount
ăăăă¨ăăă¨ăŠăăŞăăăăăăăăăăăžă ĺž
ă¤ăŽăŻćŞăăă¨ă§ăă ăžăăŻă mounted
ăŤăŞăŁăŚăăŞădestroying
ăŻăăăŽćŠč˝ăŽĺŽčŁ
č
ăăăăăžăăćăăžăăă
ç§ăŻăăăŤćŹĺ˝ăŤćˇˇäšąăăŚăăžăăBă¨CăAăŤçľĺăă䝣ăăăŤăăłăźăă秝ĺăăŚăAăA.jsăŤăăźăăăăŚăăăA.jsăŤăB.dataăă¨ăC.dataăăć´ć°ăăăžăă ă ăăăăă°ăä˝ăăăŽççąă§A.dataăĺ¤ć´ăăăĺ ´ĺăäťăŽăłăłăăźăăłăăŻĺ§äťťăăăă¨ăăăŽă§ăŻăŞăăčŞĺçăŤĺăŹăłââăăŞăłă°ăăăžăă
ăăăŻč¤éăăĺ˘ăăćŞăçżć Łă§ăă ăăăŤĺŽĺ ¨ăŤć¸ăăŚăżăŚăă ăăăćĺłăčŚăŚăżăžăăăăăăăăç§ăŤă¨ăŁăŚăŻăč¤éăăĺ¤§ĺš ăŤĺ˘ăăă ăă§ăă
ăăăłăłăăźăăłăăăĺĽăŽăłăłăăźăăłăă¸ăŽĺśĺžĄă ĺ ąćăăăŚăăĺ ´ĺă§ăăăăźăżăĺăé˘ăăŚAăăłăłăăźăăłăAăăăŹăłăăŞăłă°ăăžăă fetchDataăhasInitializedăŞăŠăŽăĄă˝ăăăĺŤăĺä¸ăŽăŻăŠăšă使ç¨ăăžăăăĺžč ăŻpromiseă§ăăăĺč ăŻĺžč ă解湺ăăžăă
ăăăŻçžĺ¨ăăłăłăăźăăłăăçľĺăăăăŚăăžăă Aăé¤ăăŚăăăăăäťăŽăŞăă§ćŠč˝ăăăă¨ăćăă§ăăžăă
ăłăłăăźăăłăăç´ćĽçľĺăăă¨ăäşćăăŞăäžĺé˘äżăăŞăźăä˝ćăăăăłăłăăźăăłăăĺĺŠç¨ă§ăăŞăăŞăăvueăăłăłăăźăăłăăćŁăăĺăŹăłăăŞăłă°ă§ăăăăăŤăŞăăžăă
ĺŽéăăăŞăăŻčŚçšăčŚéăăŚăăžăăăăăăŻăăăăăăäťăŤĺ˝ąéżăä¸ăăăă¨ăŞă使ç¨ăăăłçśćă§ăăćĄĺźľăŤçˇŠăçľĺăăăŚăăžăă ĺŽéă <component-x />
ĺ¤ăŽčŚŞăŤăłăźăăč¨čż°ăăăŤăăŠăăŤă§ăăăăăŽăăăăăč¤ć°ĺăăăăă§ăăžăă v-if
ăŻăŞăăăăŽçść
ă玥çăăăăăŽvuexăŞăŠăŻăăăžăăă
示ăăăăŤăăăăăAăăBăăăłCăŤçľĺăăžăăăăăăăăžăĺĺ˛ăăăăĺżçăăăłăłăăźăăłăăŽć°ăć°ăăŚăçšĺŽăŽćĺž ć°ďźăăŽĺ ´ĺăŻ2ďźăŤéăăă¨ăăŤçśčĄăăăă¨ăă§ăăžăăäžďź
this.$root.$emit('thruster-mounted') // in B and C
// instead of
this.$root.$emit('thruster-1-mounted') // for B and 2 for C
// then count the responses and resolve once they are >= 2 in component A
ă¨ăŤăăăăăăăłăłăăźăăłăăŽäžĺé˘äżăŽĺŚçăŤă¤ăăŚčż°ăšăççąă§ăăăăăŻćăžăăăă¨ă§ăăăćĺž ăăăŚăăžăăăč¤éăŤăŞăăťăŠćˇˇäšąăăăăăă§ăăă ăč¤éăŤăăŞăă§ĺŽčĄăăĺż čŚăăăăžăă
ăžăăŻăă°ăăźăăŤăšăłăźăă§ăŻăŞăăAăBăCăŽčŚŞăŤç´ćĽă¤ăăłăă
emit
ăŚăBă¨CăăŹăłăăŞăłă°ăăăăŠăăă茪ăŤćąşĺŽăăăžăă
ăăŞăăăăăč¨ăă¤ăăă ăŁăăŽăŻçĽăŁăŚăăžăăăăăăăŻćăžăăăăăžăăă ăăăăŽăłăłăăźăăłăăŻäťăŽăăŽăŤăăŁăŚĺśĺžĄăăăăšăă§ăŻăŞăăŽă§ăăĄă¤ăłăłăłăăźăăłăăŻăăŽĺäžăä˝ăăăăăăăžăć°ăŤăăăçŹçŤăăăžăžă§ăŞăăă°ăŞăăŞăăă¨ă埡調ăăžăăă ă˘ăăŞăŽăŠăăŤă§ăé
罎ă§ăăăăăŤăăăăă§ăĺăăă¨ăćŠč˝ăăăăă¨ćăŁăŚăăžăă ăăŞăăăăă§č¨ăŁăŚăăăă¨ăăăçŹéăăăšăŚăăŠăŽăăăŤăăŠăăŠăŤăŞăăăčŚăŚăă ăăă ăăăăç§ăŻćĺéăDOMăăŞăźăŽăŠăăŤă§ăăłăłăăźăăłăăç°ĄĺăŤé
罎ă§ăăăăšăŚăăăžăćŠč˝ăăžăă ç§ăŻăăăŽč¤ć°ăŽăłăăźăćă¤ăă¨ăăă§ăăžăăăăăŚăăăŻăžă ĺăăžăă ăŠă¤ăăľă¤ăŻăŤăŽasync
... await
ăŤćčŹăăžăă
<template> <a-component @rendered="showBandC = true" /> <b-component v-if="showBandC" /> <c-component v-if="showBandC" /> </template>
ăăŽĺ ´ĺăBă¨CăăŹăłăăŞăłă°ăăĺăŤĺŽéăŤăŹăłăăŞăłă°ăăĺż čŚăăăăŽăŻAăŤă¤ăăŚä˝ă§ăăă
ăăŚăłăăăĺăŤăĺăłăłăăźăăłăăŤĺşćăŽä˝ćĽăĺŽčĄăăŚăăăăăă ăă ăăăăšăŚăŽăłăłăăźăăłăăŻăäťăŽăăšăŚăŽăłăłăăźăăłăăăăŽä˝ćĽăĺŽäşăăă¨ăăŤăŽăżăŹăłăăŞăłă°ăăăžăă ăăăăăă§ăŽčŠąă§ăă
çść
玥çă¨v-if
使ăŁăŚé ĺźľăŁăŚăă ăăăăăăŻă v-if
ăŽvuexçść
玥çăä˝ćăăĺż
čŚăăăăžăă ĺéĄăăăăăžăăďź čŞŹćăăăŚăă ăăďź
// component Z totally different from foo, so we can't make this a component for reuse
<template>
<a-component @rendered="showBandC = true" />
<c-component v-if="showBandC" />
</template>
...
computed: {
showBandB() { ...vuex ...,
showBandC() { ...vuex ...,
}
// component Foo totally unique, probably has other things it does
<template>
<b-component v-if="showBandC" />
<c-component v-if="showBandC" />
</template>
...
computed: {
// ok you could mixin this, fair, but complex nevertheless
showBandB() { ...vuex ...,
showBandC() { ...vuex ...,
}
.....ăăăŚăăŁăă
揥ăŽăăăŤă茪ă§ä˝ăăăăŤăłăłăăźăăłăă使ç¨ăă䝣ăăăŤă揥ăŽăăăŤăăžăă
// component Z
<template>
<a-component />
<b-component />
</template>
// component Foo
<template>
<b-component />
<c-component />
</template>
...ăŞăŠ
created()
ăĄă˝ăăăŤä˝ăăăăĺ ´ĺăăăăjavascriptăŻăŠăšăäťăăŚăšăă˘ăŤăăźăżăĺ Ľĺăăăstore
ă˘ă¸ăĽăźăŤă使ç¨ăăăăăăă¨ă匨ăăăăŽăŻä˝ăăăăžăăă ăăăăć示çăŞăŚăźăšăąăźăšăŽćšă彚çŤă¤ă§ăăăăă¤ăžăăăăŁăăăŁă§ăăŞăăŚăźăśăźăšăăźăŞăźăŽUXăŻä˝ă§ăăďź
ăŠăăŤă§ăćŁăă°ăŁăŚăăçść 玥çăŤă¤ăăŚç§ăč¨ăŁăăă¨ăčŚăăŚăăžăăďź ăăăăŽăłăłăăźăăłăă玥çăăă¨ăăăă¨ăŻăäťăŽĺ ´ćă§ĺ¤ăăŽăă¨ă玥çăăăă¨ăćĺłăăăă¨ăćăă§ăăžăăăăăăŻăç§ăäťčĄăŁăăă¨ă§ăŻăŞăăé常ăŤč¤éă§ăă ăăŽä¸ăăăăŻç§ăăăăŤăăăăă¨ăăăžăăă ĺăłăłăăźăăłăăăăťă¨ăăŠč¤éăăäź´ăăăŤĺŽčĄăăăă¨ăŤăŞăŁăŚăăăă¨ăĺŽäşăăă¨ăăŤăŽăżăăŚăłăăăžăă
ă˘ă¤ăă˘ăŻă揥ăŽăăăŻé˘ć°ăŤé˛ăĺăŤăVueăĺ é¨çăŤéĺćăĺ°éăăăă¨ă§ăă
ăăŽé¨ĺăŻçăŤăăŞăŁăŚăăăă¨ăŻç˘şăă§ăăăăŞăäžăč¤éăŤăăĺż čŚăăăăŽăââăăăăžăăăăŞăăăŽăŚăźăśăźăšăăźăŞăźăŽăăăŞăă¨ăč¨ăŁăŚăŻăăăŞăăŽă§ăăăăă
ç§ăŽăłăłăăźăăłăăŤăŻ
async beforeMount
ă¨async mounted
严ćšăăăăžăăăbeforeMount
ăŽăłăźăăĺŽäşăăĺăŤămounted
ăŽăłăźăă辡ĺăăŚăăžăăbeforeMount
ăĺŽäşăăĺăŤămounted
辡ĺăăăăăŻăăăŤăŻăŠăăăă°ăăă§ăăďź
éčŚăŞăŽăŻăăăăăŽăłăłăăźăăłăăŽăăăăăăŹăłăăŞăłă°ăăăĺăŤçŠäşăçşçăăăłăłăăźăăłăčŞä˝ăŽĺ¤é¨ăŤăăžăĺ¤ăăŽĺ ĽĺăăăŞăăŚă使ç¨ă§ăăăăăŤăăăă¨ă§ăă ăăăŻăç§ăăĄăä˝ćăăŚăăă˘ăăŞăĺŠç¨ĺŻč˝ă§ăăă°ăăăŁă¨ăăžăăăăăŻăă ă¨ç§ăć°äťăăĺŽéăŽăă¨ă§ăă ç§ăŻçľĺąăĺ¤ăăŽăăăŻăšă¤ăłăvuexăăăăŚăŠăăŤă§ăďźăăăŻăšă¤ăłă使ç¨ăăŚďźĺźˇăçľĺăăă茪ăćă¤ăłăźăăć¸ăăă¨ăŤăŞăăžăăăăăăćŹ č˝ăăŚăăăăăăłăłăăźăăłăă使ç¨ăăăžăăă ăăăŻč¤éăŞčŠąă§ăŻăăăžăăăĺŽéăŤä˝ă辡ăăŁăăŽăăç°ĄĺăŤčŞŹćăăŚăăžăă UIăŽč¨č¨ă¨äżĺŽăŽćšćłăĺčăăĺż čŚăăăăžăăă čŚčŚçăŤăŻĺ°ăé˘ç˝ăăŞăăŞăăăłăźăçăŤăŻăăŞăč¤éăŤăŞăăžăăă
ăăŽĺç´ăŞăťăăă˘ăăăŤĺ°ĺ ĽăăăăăŽĺ°ăăŞéĺćăŤăăŁăŚč§Łćąşăăăč¤éăŞăăŽăăăă¤ăăăăăăăžăă...ăŠă¤ăăľă¤ăŻăŤăŽćŠč˝ăĺž ăĄăžăăďź
@wparad
ă¤ăžăăä˝ćăĺŽäşăăŚăăŞăăłăłăăźăăłăăă˘ăłăăŚăłăăăăă¨ăăă¨ăŠăăŞăăăăăăăăăăăžă ĺž ăŁăŚăăăŽăŻćŞăăă¨ă§ăă ăžăăŻăăăŚăłăăĺŽäşăăŚăăŞăăăŽăç ´ćŁăăŚăăăăŽćŠč˝ăŽĺŽčŁ č ăŻăăăăžăăăăăžăăă
ăăăŻăŠăă§ăďź
...éćăăăŤăŻăă˘ăźăăăŻăăŁăŽć šćŹçăŞĺč/ć¸ăç´ăăĺż čŚă§ăăăăŠă¤ăăľă¤ăŻăŤăăăŻăŽĺćć§ăŤäžĺăăĺ¤ăăŽăă¸ăăŻăĺŁăĺŻč˝ć§ăăăăžă...
...ăăŞăăč¨ĺăăŚăăă¨ç§ă俥ăăé¨ĺă ăăăăŽă¨ăă¸ăąăźăšăĺŚçăăćšćłăĺż čŚă§ăăăăăăăăăăăăăă䝼ä¸ăŽćšćłăĺż čŚă§ăă č¨ăćăăă°ăç§ăăĄăŽćĺłăŻă˘ăăŞăăŻăŠăăˇăĽăăăăă¨ăŞăćŠč˝ăăĺż čŚăăăăžăă
ăăăăăšăŚăŽĺ ´ĺăŤăăăŚă夹ćăăĺŻč˝ć§ăŽăăăťă¨ăăŠăŽéĺććä˝ă¨ĺć§ăŤăăżă¤ă ă˘ăŚăă使ç¨ăăŚĺž ćŠăăă§ăăŻăžăăŻä¸ć˘ăăžăă
ăăăăç§ă注ć桹ăć示ăăäžăčŚăă¨ăç§ăä˝ăćĺłăăŚăăăŽăăăăăăžăă ăăăŻăăŠăăŤăĺ¤ăăŽăłăźăăć¸ăăŞăăŚăăĺ¤ăăŽăă¨ă解湺ă§ăăăŻăă§ăă ĺŽéăăăăĺŻč˝ă§ăăă°ăç§ăăĄăŽă˘ăăŞăŻăŻăăăŤĺ°ăăăăăăŠă°ăăăăłăźăăăźăšăććĄăăăăăŽă§ăăŻăăăŤĺŞăăŚăăĺŻč˝ć§ăăăăžăă
ăăăăŽç¨ŽéĄăŽćŠč˝ăŤă¤ăăŚăŽăă¨ăŻăé厳ăŤăśă¤ăăŁăă¨ăăŤăŽăżăăăăŽéčŚć§ăăăăă¨ăăăă¨ă§ăă ç§ăćĺăŤăăŽăăźă¸ăŤă˘ăŻăťăšăăăŽăŻăç§ăäťćăăăžăăŤăăŽäžăŤă¤ăăŚĺ¤ăăŽĺéżçăčăăă¨ăă§ăă ç§ăŻĺŠăăćąăăŤćĽăŚăăžăăă§ăăăVueă§ĺŠç¨ă§ăăŞăăă¨ăŤć°äťăăăŽă§ăćŠč˝ăŞăŻă¨ăšăăćĺşăăăă¨ă§ăăă
ćăĺčăŤăŞăăłăĄăłă
ăăăŻç§ăĺž ăĄćăă§ăăĺŽéăŽăłăźăă§ăďź
ăăăŻ
UserPage
ăłăłăăźăăłăăŽä¸é¨ăŤăŞăăžăă