routerOptionPlugin
1export default async ({ app,store }) => { 2 app.router.afterEach((to, from) => { 3 let page_name; 4 page_name = to.name; 5 6 switch(page_name){ 7 case "privacy" : 8 console.log("privacy page"); 9 store.dispatch("changeSingleState", true); 10 break; 11 12 case "agreement" : 13 console.log("agreement page。"); 14 store.dispatch("changeSingleState", true); 15 break; 16 17 case "index" : 18 console.log("index page。"); 19 store.dispatch("changeSingleState", false); 20 break; 21 } 22 }); 23 };
store
1export const state = () =>({ 2 isActive: false, 3 isWhite: false, 4 isSinglePage: false 5}) 6 7export const mutations = { 8 setActiveState(state,value){ 9 state.isActive = value 10 }, 11 changeHeaderWhite(state,value){ 12 state.isWhite = value 13 }, 14 setSingleState(state,value){ 15 state.isSinglePage = value 16 console.log(state.isSinglePage, '~~~~~~~') 17 } 18} 19export const actions = { 20 changeSingleState({commit},value){ 21 console.log(value,"aaaaaaaaaaaaa"); 22 commit("setSingleState",value) 23 }, 24 changeActive({commit},value){ 25 commit("setActiveState",value) 26 } 27}
html
1<a href="../#feature" v-if="singlePageState"> 2 <img src="/assets/img/navi.png" alt=""> 3</a> 4<nuxt-link v-scroll-to="'#feature'" to="#feature" v-if="!singlePageState"> 5 <img src="/assets/img/navi.png" alt=""> 6</nuxt-link>
singlePageStateはtrueかfalseをstoreで管理しており、aタグかnuxt-linkを使うかの切り分けをv-ifで書いております。
問題は、
topから下層ページに遷移した時と、下層ページに直アクセスした際で、trueなのにfalseの部分が表示されたり、falseなのにtrueの条件部分が表示されたりします。
storeの値はconsoleで見ると問題なくtrueとfalse切り替わっているのですが、これはなぜでしょうか。
storeのisSinglePageはHTML内のsinglePageStateにどのように代入しているのでしょうか?
返信ありがとうございます。
data、computed、mountedそれぞれの書き方で
singlePageState = this.$store.state.isSinglePage
という感じで代入し試しましたが、結果は全て変わりませんでした。
また、v-ifに直接storeのstateを書いても初期表示と別ページからの遷移時でtrueとfalseの挙動がうまく動きませんでした。
v-if条件分岐に入る前に{{singlePageState}}の形式でtrueが表示されているのに、falseの<nuxt-link>の分岐に入るような感じです。。
回答1件
あなたの回答
tips
プレビュー