Vueルートの切り替えページは問題解決策を更新しません。
前書き:vue-routerの切り替えは伝統的なページとは違っています。ルート間の切り替えは、実はコンポーネント間の切り替えで、本当のページ切り替えではありません。これは同じコンポーネントを引用すると、コンポーネントが更新できなくなります。つまり、私たちの口の中のページが更新できなくなります。
一、問題が現れる
経路の切り替え結果
このときinputタグのvalue値はルートの変化によって変化していないことが分かります。更新されていません
二、解決策①
'router-view:key="key"に違いを追加します。これでvueはこれが違っていると認識します。
経路の切り替え結果
この時にルートが更新されます。でも、これはつまり、各〈router-view〉を一つのkey値に結びつける必要があるということです。もし私がPage 1からPage 2の異なるコンポーネントにジャンプしたら、コンポーネント更新の心配はありません。
三、解決策②
"router-view v-inf="routerAlive"に異なるv-if値を追加して、先にを破壊して、再度を作成して、ページを更新する効果があります。
①router-linkコンポーネントにクリックキャンセルがありますので、ここのnativeはコンポーネントの元のラベルにあるイベントをトリガするためです。
②this.$nextTick()=>{}の使い方は、this.routerAlive=falseです。トリガー後にthis.routerAlive=trueを実行します。破壊して再作成する効果があります。
四、ソリューション②の延長は、ルーティングの更新をルーティング内部でトリガする。
方案①、方案②はいずれもルートの外部を通じてルートを更新するので、もしルートの内部からルートを更新したいならば?
①、「ニコニコにジャンプしてルートを更新しない」をクリックすると、inputのvalue値は変わりません。
②、「ニコニコにジャンプして、ルートを更新する」をクリックすると、inputのvalue値が変わります。
③私たちはinputに勝手に数値を入力し、「自分にジャンプしてルートを更新しない」をクリックすると、inputの内容が更新されていないことが分かります。
④、更新自体をクリックすると、ルーティングの更新がトリガされます。実用的ではありませんか?
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
一、問題が現れる
経路の切り替え結果
このときinputタグのvalue値はルートの変化によって変化していないことが分かります。更新されていません
二、解決策①
'router-view:key="key"に違いを追加します。これでvueはこれが違っていると認識します。
経路の切り替え結果
この時にルートが更新されます。でも、これはつまり、各〈router-view〉を一つのkey値に結びつける必要があるということです。もし私がPage 1からPage 2の異なるコンポーネントにジャンプしたら、コンポーネント更新の心配はありません。
三、解決策②
"router-view v-inf="routerAlive"に異なるv-if値を追加して、先に
①router-linkコンポーネントにクリックキャンセルがありますので、ここのnativeはコンポーネントの元のラベルにあるイベントをトリガするためです。
②this.$nextTick()=>{}の使い方は、this.routerAlive=falseです。トリガー後にthis.routerAlive=trueを実行します。破壊して再作成する効果があります。
四、ソリューション②の延長は、ルーティングの更新をルーティング内部でトリガする。
方案①、方案②はいずれもルートの外部を通じてルートを更新するので、もしルートの内部からルートを更新したいならば?
<!-- App.vue -->
<template>
<div class="app">
<div class="slide">
<ul>
<li><router-link to="/page1/freddy" >freddy</router-link></li>
<li><router-link to="/page1/nick" >nick</router-link></li>
<li><router-link to="/page1/mike" >mike</router-link></li>
</ul>
</div>
<div class="content">
<router-view v-if="routerAlive"></router-view>
</div>
</div>
</template>
<script>
export default{
data(){
return {
routerAlive:true
}
},
provide(){ //
return {
routerRefresh: this.routerRefresh
}
},
methods:{
routerRefresh(){
this.routerAlive = false;
this.$nextTick(()=>{
this.routerAlive = true;
});
}
}
}
</script>
<!-- Page1 -->
<template>
<div class="page-1">
:<input type="text" v-model="value"><br/>
<button @click="linkToNick1"> nick, </button>
<button @click="linkToNick2"> nick, </button>
<br/>
<button @click="linkToSelf1"> , </button>
<button @click="linkToSelf2"> </button>
</div>
</template>
<script type="text/javascript">
export default {
name:'page1',
inject:['routerRefresh'], //
mounted(){
this.value = this.$route.params.name;
},
data(){
return {
value:''
}
},
methods:{
linkToNick1(){
this.$router.push('/page1/nick');
},
linkToSelf1(){
this.$router.push('/page1/freddy');
},
linkToNick2(){
this.$router.push('/page1/nick');
this.routerRefresh();
},
linkToSelf2(){
this.routerRefresh();
}
}
}
</script>
<style type="text/css">
button { margin-top:10px;}
button:hover { background:#ff9500; }
</style>
①、「ニコニコにジャンプしてルートを更新しない」をクリックすると、inputのvalue値は変わりません。
②、「ニコニコにジャンプして、ルートを更新する」をクリックすると、inputのvalue値が変わります。
③私たちはinputに勝手に数値を入力し、「自分にジャンプしてルートを更新しない」をクリックすると、inputの内容が更新されていないことが分かります。
④、更新自体をクリックすると、ルーティングの更新がトリガされます。実用的ではありませんか?
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。