Ich habe Single-Seite-Anwendung, die Authentifizierung erfordert. Wenn der Benutzer authentifiziert wurde, besuchen Sie einige Seiten oder klicken Sie auf die Schaltfläche zum erneuten Laden im Browser, um eine API anzufordern, die ihre Authentifizierungsdaten zur Verfügung stellt. dann habe ich einen Fehler wie folgt aus:Vuejs synchron vor dem Rendern Daten anfordern
[Vue warn]: Error when evaluating expression "auth.name": TypeError: Cannot read property 'name' of null (found in component: <navbar>)
Dieser Fehler wird verursacht, weil vue Auth Daten machen während die Anforderung an api noch nicht beendet haben.
Ist es möglich, vue warten die Anfrage api bis zum Abschluss zuerst, bevor vue render auth Daten?
nur deutlicher was hier vor sich geht. Hier ist der Code:
// 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>
Sie sollten Ihren Code schreiben. Ich glaube nicht, dass notwendig ist synchron zu gehen –
@YerkoPalma Ich benutze Vue-Router und Vuex. Zur Zeit stelle ich Code (für eine Anfrage api) in App.vue bereit() – antoniputra
@YerkoPalma Mein Code ist wie allgemeines Einseiten-App-Projekt, bis ich auf dieses Problem stoße. – antoniputra