[英]how to make dynamic v-if when render in component Vue js?
渲染到另一个组件以快速渲染时如何制作v-if? 我有一些情况,当我要登录时,成功后我的nabvar component
更改,我应该手动将其重新加载到客户端以获取logout button
并且在删除时也是如此,我应该手动重新加载我已经把:key
放到那个组件上
这是我的login.vue页面中的组件
goLogin() { if (!this.input || !this.password) { this.$swal.fire({ type: 'error', text: `please enter your email/username and password`, }); } else { const client = { input: this.input, password: this.password, }; this.$axios .post('/api/user/login', client) .then(({ data }) => { localStorage.setItem('token', data.token); // vm.$forceUpdate(); localStorage.setItem('role', data.tryingLogin.role); this.$swal.fire({ type: 'success', text: `successfully login`, }); if (data.tryingLogin.role === 'admin') { this.$router.replace({ path: '/admin' }); } else { this.$router.push({ path: '/' }); } }) .catch(err => { this.$swal.fire({ type: 'error', text: err.response.data.error, }); }); }
在我的Header.vue组件上,我有isLogin
道具,并且我检查是否localStorage.getItem(“ token”)我关闭按钮登录并在navbar header.vue
上注册,如果客户端有令牌,它应该显示注销按钮,但是它不是,成功登录后,我应该重新加载它以使按钮logout showing
如何迫使它迅速改变? 交换显示和隐藏按钮的登录和注销权限?
我也制作道具来检查我的App.vue
上的登录,并且我使用所有挂钩来交换登录按钮ans logout,它根本没有改变,:(
当我也删除列表时,它就会发生,我应该重新加载它:(我希望你们能给我一些帮助和技巧来解决这个问题:D
要在不同组件之间共享状态,最好的选择是使用状态管理库,例如Vuex: https ://vuex.vuejs.org
您创建一个存储,其中存储有关用户是否已登录的信息:
const store = new Vuex.Store({
state: {
isLoggedIn: false
},
mutations: {
TOGGLE_LOGIN_STATUS: (state) => {
state.isLoggedIn = !state.isLoggedIn;
}
}
})
成功登录后,可以更改isLoggedIn
标志:
store.commit('TOGGLE_LOGIN_STATUS');
而且您可以从任何组件的商店中获取此状态(它也是反应性的,因此更改会反映在所有组件中)-它必须是computed
属性:
computed: {
isLoggedIn() { return store.state.isLoggedIn; },
}
现在,您可以在v-if
使用isLoggedIn
来显示注销按钮。 只需记住将商店导入组件中或使其成为全局商店即可(所需的一切都在Vuex的文档中)。
另一种方法是使用事件总线。
/src/event-bus.js
import Vue from 'vue';
export const EventBus = new Vue();
将其导入您的登录组件。
import EventBus from '@/event-bus';
获取令牌并成功登录后,发出一个事件:
EventBus.$emit('logged-in', true);
现在,将EventBus导入到接收事件的组件中(带有注销按钮的组件),并将侦听器放置在已mounted
挂钩中:
mounted() {
EventBus.$on('logged-in', payload => {
this.isLoggedIn = payload;
})
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.