我有單個頁面應用程序需要驗證。當用戶通過身份驗證後,訪問一些頁面或點擊瀏覽器中的重新加載按鈕,它會請求提供auth數據的api。然後,我有這樣的錯誤:Vuejs在渲染數據之前同步請求
[Vue warn]: Error when evaluating expression "auth.name": TypeError: Cannot read property 'name' of null (found in component: <navbar>)
這個錯誤造成的,因爲VUE呈現權威性數據而到API請求還沒說完呢。
是否有可能使vue等待請求api,直到完成第一次vue渲染認證數據?
更清楚地發生了什麼。下面是代碼:
// main.js
import Vue from 'vue'
import App from './App.vue' // root vue
import store from './vuex/store' // vuex
import router from './router' // my router map
sync(store, router)
router.start(App, '#app')
// end main.js
// App.vue
<template>
<main>
<div class="wrapper">
<router-view></router-view>
</div>
</main>
</template>
<script>
import authService from './services/auth' // import authservice
ready() {
// here is code that should be done first before vue render all authData
auth.getUser((response) => {
self.authData = response
})
},
data() {
return {
authData: null // default is null until the api finish the process
}
}
</script>
// end App.vue
// SomeRouterComponents.vue
<template>
<!-- some content -->
<div>
// always got error: cannot read property 'name' of null
// here I expect to render this after api has been resolved
{{ $root.authData.name }}
</div>
<!-- some content -->
</template>
你應該張貼您的代碼。我不認爲需要同步 –
@YerkoPalma我正在使用vue-router和vuex。目前我把代碼(用於請求api)放在App.vue中ready() – antoniputra
@YerkoPalma我的代碼就像一般的單頁應用程序項目,直到遇到此問題。 – antoniputra