関数が真または偽と評価される前に、私のナビゲーションバーにちらつきが発生しています。Vue.jsでnavbarフリッカーを経験する
export default {
methods: {
isAuthenticated() {
return this.$store.state.user.authenticated
}
},
data:() => {
return {
unauthenticated: [
{
title: 'Link1',
url: '/link1'
},
{
title: 'Link2',
url: '/link2'
},
{
title: 'Link3',
url: '/link3'
}
],
authenticated: [
{
title: 'otherLink1',
url: '/otherlink1'
},
{
title: 'otherLink2',
url: '/otherlink2'
},
{
title: 'otherLink3',
url: '/otherlink3'
}
]
}
}
}
そして、ナビゲーションバーには、以下があります:
評価する必要がある機能は以下のとおりです。私は、ナビゲーションを通してクリックすると
が<template v-if="isAuthenticated()">
<b-nav is-nav-bar>
<b-nav-item v-for="nav in authenticated" :key="nav.title" :href="nav.url">{{nav.title}}</b-nav-item>
</b-nav>
</template>
<template v-else>
<b-nav is-nav-bar>
<b-nav-item v-for="nav in unauthenticated" :key="nav.title" :href="nav.url">{{nav.title}}</b-nav-item>
</b-nav>
</template>
ただし、認証されていないリンクが表示されるため認証されたリンクは、isAuthenticated()
関数がまだ評価されていないかのように見えます。このフリッカーを取り除くにはどうしたらよいですか?
マイストアファイル(user.jsの)ファイルには、次のようになります。
export const state =() => ({
headers: {},
profile: {}
})
export const mutations = {
updateHeaders (state, headers) {
state.headers.access_token = headers['access-token']
state.headers.token_type = headers['token-type']
state.headers.client = headers['client']
state.headers.expiry = headers['expiry']
state.headers.uid = headers['uid']
if (state.headers.expiry == null) {
state.authenticated = false
} else {
let timeToExpiry = new Date(state.headers.expiry * 1000)
let now = new Date()
state.authenticated = now < timeToExpiry
}
},
signout (state) {
state.headers = {}
state.profile = {}
}
}
ログイン/ログアウト方法はRailsのアプリへのAPI呼び出しを介して生じます。 Deviseの宝石は残りを扱います。
ありがとうございます!
編集:私はリンクがフードの下this.$router.push(url)
に提出することを信じているので、私は、レイアウト/ページ/コンポーネントのためNuxt.jsを使用しています
。
b-nav
タグを使用すると、いずれかのリンクをクリックしたときに実行されるどのようなコードBootstrap Vue
あなたの店で 'user.authenticated'の値を設定する方法は、ajaxリクエストですか? –
私の質問を更新しました:)リクエストは 'this。$ axios.delete( '/ auth/sign_out')'と 'this。$ store 'のような呼び出しを介して発生しています。コミット( 'user/signout') ' – DaniG2k
' headers'と 'profile'の場合と同じようにストアで' authenticated'のデフォルト値を設定しようとしましたか? – Nora