【Hello VUE】暴学VUE之代码讲解(八)

从这一章开始,讲解系统的程序逻辑了。涉及很多vue相关的知识,还有原作者的思路。比较枯燥,而且由于水平有限,我只能把我所知道讲出来,如果有不对的地方请指正。

什么是main.js,他主要干什么用的?App.vue又是干什么用的?main.js 里面的import from又在干嘛?newVue({})是干嘛的?里面又需要什么参数,它到底能干什么。在网上搜了一篇博文,解答一些初级的困惑。

vue项目入口

vue项目入口有两个文件:
/src/App.vue 页面布局
/src/main.js 程序逻辑
/src/router/index.js 程序路由信息

App.vue源码

<template>
  <div id="app">
    <router-view/>
  </div>
</template>

<script>
export default {
  name: 'app'
}
</script>

<style>
  @import "./assets/css/main.css";
  @import "./assets/css/color-dark.css"; 
</style>

App.vue是我们的主组件,所有页面都是在App.vue下进行切换的。也是整个项目的关键,app.vue负责构建定义及页面组件归集。其实你也可以理解为所有的路由也是App.vue的子组件。所以我将router标示为App.vue的子组件。

  1. 所有的html代码要放置在template标签里面
  2. 所有的javascript代码要放置在script标签里面
  3. 所有的style代码要放置在style标签里面

main.js源码

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
import AxiosPlugin from './libs/AxiosPlugin'
import store from './store/'

Vue.use(AxiosPlugin)
Vue.use(ElementUI);
Vue.config.productionTip = false;

//判断是否有token,没有则登陆
router.beforeEach((to, from, next) => {
  if (to.path != '/login') {
    var token = sessionStorage.getItem('token');
    if (token == null) {
       next({path:'/login'});
    } else {
      //根据后台返回的路由进行判断是否合法
      var routers = sessionStorage.getItem('routers');
      var flag = false;
      routers.split("_").forEach( v => {
        if(v == to.path) {
          flag = true;
        }
      });

      if(flag) {
       next();
      } else {
         next({path:'/home'});
      }
    }
  } else {
    next();
  }
})


/* eslint-disable no-new */
new Vue({
  store,
  el: '#app',
  router,
  template: '<App/>',
  components: { App }
})

main.js 程序入口文件,是初始化vue实例并使用需要的插件,加载各种公共组件.

import from 是干嘛的呢?

实际上,importfrom是ES6语法里面的。因为相关知识很多,具体参见博客里ES6里面的import,export。
在这里只是给大家介绍下它在这里的用处。
在这里插入图片描述

  1. import Vue from ‘vue’;
    其实最完整的写法是:
    import Vue from “…/node_modules/vue/dist/vue.js”;
    意思是:因为main.js是在src文件中,所以…/向前一级相对目录查找node_modules,再依次寻找后面的文件。
  2. import App from ‘./App’;
    其实最完整的写法是(相对路径):
    import App from ‘./App.vue’;
    推荐这样写,直接路径:
    import App from ‘@/App.vue’;
    意思其实就是引入我们写好的.vue文件。
  3. 还可以有
    import router from ‘./router’;
    import router from ‘./router/index.js’;
    import router from ‘@/router/index.js’;

import axios from ‘axios’;
import axios from ‘…\node_modules\axios\dist\axios.js’;

import ‘./less/index’;
import ‘./less/index.less’;

@代表的是src文件夹

小结:在简书上看到有一个人总结的很好:

  1. import…from…的from命令后面可以跟很多路径格式,若只给出vue,axios这样的包名,则会自动到node_modules中加载;若给出相对路径及文件前缀,则到指定位置寻找。
  2. 可以加载各种各样的文件:.js、.vue、.less等等。
  3. 可以省略掉from直接引入。

/router/index.js源码

import Vue from 'vue'
import Router from 'vue-router'

import Home from '@/views/Home.vue'
import Login from '@/views/login/Login.vue'

Vue.use(Router)

// 登录页面单独写,如下
export const loginRouter = {
  path: '/login',
  name: 'login',
  meta: {
    title: 'Login - 登录'
  },
  component: Login
}

export const appRouter = {
  path: '/',
  name: 'home',
  redirect: '/login',
  component: Home,
  children: [
    {
      path: '/home',
      title: '首页',
      name: 'dashboard',
      component: () => import('@/views/Index.vue')
    },
    //用户管理
    {
      path: 'user/list',
      title: '用户列表',
      name: 'userList',
      component: () => import('@/views/user/UserList.vue')
    },
    {
      path: 'user/info',
      title: '用户信息',
      name: 'userInfo',
      component: () => import('@/views/user/UserInfo.vue')
    },
    //example
    {
      path: 'example/table',
      title: 'TABLE',
      name: 'exampleTable',
      component: () => import('@/views/example/table.vue')
    },
    {
      path: 'example/form',
      title: 'FORM',
      name: 'exampleForm',
      component: () => import('@/views/example/form.vue')
    }

  ]
};

export default new Router({
  mode: 'history',
  linkActiveClass: 'active',
  routes: [loginRouter, appRouter]
})

router index.js 把准备好路由组件注册到路由里

这里还有一些其他的文件意思:

index.html文件入口

src放置组件和入口文件

node_modules为依赖的模块

config中配置了路径端口值等

build中配置了webpack的基本配置、开发环境配置、生产环境配置等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章