javascript - 如何在 vue js 中管理 SPA 上的导航重新渲染

标签 javascript vue.js single-page-application

我正在使用 Vue.js 框架构建 SPA。本质上,我在 App.vue 中有一个模板,它包含一个导航,然后在它下面有一个路由器 View 。当用户登录时,我会弹出一个模式并向我的 API 发送登录请求。

我遇到的问题是当用户登录时,我不确定如何重新呈现导航,以便在用户登录后隐藏登录和注册选项。我知道我可以使用 v-if="user"类型的方法,但我不确定如何在登录后从模式中传回这个“user”变量。

App.vue

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/head_img.png">
      <nav>
        <ul>
          <li><router-link to="/games">All games</router-link></li>
          <li><router-link to="/">Home</router-link></li>
          <li><modal-login>Login</modal-login></li>
          <li><modal-register>Register</modal-register></li>
          <li v-if="user">Logout</li>
        </ul>
      </nav>
      <router-view></router-view>
  </div>
</template>

<script>
import ModalLogin from './components/ModalLogin.vue'
import ModalRegister from './components/ModalRegister.vue'

export default {
  name: 'app',
  components: {
    ModalLogin,
    ModalRegister
  }
}
</script>

模态示例

<template>
    <div>
        <a href="/#register" @click.prevent="show">Register</a>
        <modal name="modal-register" @opened="opened">
            <form @submit.prevent="doRegister">
                <div class="form-group">
                    <label for="email" class="block">Email</label>
                    <input v-model="email" type="email" id="email" name="email" class="border" ref="email">
                </div>
                <div class="form-group">
                    <label for="password" class="block">Password</label>
                    <input v-model="password" type="password" id="password" name="password" class="border">
                </div>
                <div class="form-group">
                    <button type="submit">Register</button>
                </div>
            </form>
            <div class="form-group">
                <p>Already have an account? <a href="#" @click.prevent="showLogin">Login</a></p>
            </div>
        </modal>
    </div>
</template>

在我的请求中,请求后面有一个 .then,这样我就可以检查该请求是否为 201 状态。

对于我可以尝试什么或我应该考虑什么来完成此类任务的任何帮助,我将不胜感激。

最佳答案

您需要全局设置用户认证状态。 Vuex 可以用于此目的。

示例代码

const state = {
  isAuth: false
}

const mutations ={
  setAuth:(state,value)=>state.isAuth = value
}

const actions = {
  loginRequest:function({commit}){
    // perform login request
    commit('setAuth',true); // call this after you get the login response
  }
}

在组件内部添加计算函数

computed:{
  isAuth:function(){
    return this.$store.state.isAuth;
  }
}

现在 isAuth 可用于处理隐藏您需要的部分的条件。

关于javascript - 如何在 vue js 中管理 SPA 上的导航重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61140045/

相关文章:

javascript - 如何使用混合 webapp(MPA 和 SPA 结合)

javascript - Gmail 是单页应用程序吗

javascript - 单击拇指可显示大图

javascript - 如何在 VueJS 自定义过滤器结果上应用函数/运算符?

vue.js - Vue CLI 为生产环境进行了缩减,但如何缩短属性和其他定义呢?

angular - 如何使用 ASP.Net Core 在主机/应用程序路径上提供 SPA

javascript - 如何使用 Quantcast Choice 根据 IAB TCF v2.0 的同意显示或阻止个性化 Adsense 广告?

javascript - firebase 部署显示空白索引文件,不显示任何应用程序

javascript - Bluebird Promisify execFile 无法得到解决的 promise

javascript - vue.js 不适用于我的第一个测试 html 页面