- MVVM 由 Model、View、ViewModel 三部分构成,Model层代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑;View 代表UI 组件,它负责将数据模型转化成UI展现出来,ViewModel 是一个同步View 和 Model的对象。
在MVVM架构下,View 和 Model 之间并没有直接的联系,而是通过ViewModel进行交互,Model 和 ViewModel 之间的交互是双向的, 因此View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。
ViewModel 通过双向数据绑定把 View 层和 Model 层连接了起来,而View 和 Model 之间的同步工作完全是自动的,无需人为干涉,因此开发者只需关注业务逻辑,不需要手动操作DOM, 不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。
Vue.js 是采用 Object.defineProperty 的 getter 和 setter,并结合观察者模式来实现数据绑定的。当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter。用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。
参考vue官网
mvvm模式理解
登录拦截-beforeEach全局路由守卫
import Vue from 'vue';
import VueRouter from 'vue-router';
// import { LgqRoutes } from './lgqRouter';
import { vCharts } from './v-charts';
Vue.use(VueRouter);
const routes = [...vCharts];
export { routes };
const router = new VueRouter({
routes
});
export default router;
router.beforeEach((to,from,next)=>{
let user=localStorage.getItem('user')//获取本地存储用户的信息
if(to.path==='/login'){
if(user){
next('/index') //如果本地存储中有用户的信息 跳转到index页面
}else{
next()
}
}else{
if(user){
next()
}else{
next('/login')
}
}
})