从构建vue项目开始,来分析vue项目中的细节以及知识点: 3.main.js

本文几个知识点:

1、sass
2、sass依赖报错的问题原因分析
3、main.js入口文件的作用
4、render: h => h(App)的含义
5、router以及VUE Router路由守卫
6、router.beforeEach()
在聊main.js这个文件之前,我们先完成一些准备工作。
首先,sass是一个很好的css扩展语言,可以帮助我们减少 CSS 重复的代码,节省开发时间。所以先下载sass。

npm install sass-loader@7.3.1 node-sass@4.14.1  --save-dev

这里标注了sass-loader与node-sass的版本,这里主要是因为经常会出现,明明下载了依赖,但是还是出现这类报错(所以平时安装依赖的时候,切忌无脑安装)

./src/App.vue?vue&type=style&index=0&lang=scss&  Syntax Error: TypeError: this.getOptions is not a function

main.js的作用

作为项目的入口文件,所有页面都会加载main.js,所以main.js的作用也是因其这个特点而出现。

1.实例化Vue。
2.放置项目中经常会用到的插件和CSS样式。例如: 网络请求插件:axios和>vue-resource、图片懒加载插件:vue-lazyload
3.存储全局变量。例如(用于的基本信息)

初始创建的main.js文件是这样的

import Vue from 'vue'

import App from './App.vue'

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

其中来解释下面这段代码的含义

new Vue({
  render: h => h(App),
}).$mount('#app')

其中render函数是vue通过js渲染dom结构的函数createElement,约定可以简写为h,
扩展开等于:

render: function (createElement) {
  return createElement(App);
}

第一步缩写:

render (createElement) {
  return createElement(App);
}

进一步缩写:

render (h) {
  return h(App);
}

使用箭头函数:

h => h(App);

实际渲染:

import App from './App'
new Vue({
    el: '#root',
    template: '<App></App>',
    components: {
        App
    }
})
router

之后我们需要加入vue router,在src下创建router/router.js文件。
在详解router.js文件之前,先来了解一下VUE Router

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集> 成,让构建单页面应用变得易如反掌。包含的功能有:

  • 嵌套的路由/视图表
  • 模块化的、基于组件的路由配置
  • 路由参数、查询、通配符
  • 基于 Vue.js 过渡系统的视图过渡效果
  • 细粒度的导航控制
  • 带有自动激活的 CSS class 的链接
  • HTML5 历史模式或 hash 模式,在 IE9 中自动降级
  • 自定义的滚动条行为
Vue.use(Router)
const vueRouter = new Router({
  routes: [{
    //首页
    path: '/',
    redirect: '/index'
  },
  {
    //登陆界面
    path:'/login',
    name:'login',
    component:() => import('../views/login/login.vue')
  },
  {
    path: '/main',
    redirect: '/index'
  },
  {
    //父子组件按层级
    path: '/main',
    component: () => import('../views/main/main.vue'),
    name: 'main',
    children: [
      {
        path: '/candlestick',//url路径
        name: 'candlestick',//组件名
        component: () => import('../views/candlestick/index.vue')//路径
      },
    ]
  }]
})
export default vueRouter

这是我写的router.js文件,之后在main.js文件中引入

import router from './router/router'

因为本次vue项目是一个后台管理系统,涉及到有些页面需要登录进去才能查看,所以我们使用router.beforeEach()做一些进入页面的限制。

beforeEach((to, from, next)

to:router即将进入的路由对象
from:当前导航即将离开的路由
next:Function,进行管道中的一个钩子,如果执行完了,则导航的状态就是 confirmed (确认的);否则为false,终止导航。
动态路由,判断用户是否登录跳转登录页面还是主页面,判断管理员权限,判断页面是否存在,不存在跳转404页面,

router.beforeEach((to, from, next) => {
  console.log(to,from)//从登录页->首页 打印信息为(to:index,from:login)
  // 不需要登陆就能进入的页面
  const nextRoute = ['login', 'register']
  if (nextRoute.indexOf(to.name) === -1) {
    // 未登录
    if (!localStorage.getItem('logined')) {
      next({
        name: 'login'
      })
    }else{
      next()
    }
  }
  // 已登录的情况再去登录页,跳转至首页
  if (to.name === 'login') {
    if (localStorage.getItem('logined')) {
      next({
        name: 'index'
      })
    }else{
      next()
    }
  }
})

之后引入elementUI

import ElementUI from 'element-ui'
Vue.use(ElementUI)

最后main.js是这样的 引入了后续需要的axiosecharts以及心跳机制,下期详细讲讲axios跟心跳

最后放下完整的main.js文件
import Vue from 'vue'
import router from './router/router'
import App from './App.vue'
import ElementUI from 'element-ui'
import echarts from 'echarts'
import axios from './config/enviroment/https'
import './config/common/adaptation'
Vue.config.productionTip = false//判断是否是生产模式
Vue.use(ElementUI)
Vue.prototype.$echarts = echarts
Vue.prototype.$axios = axios
router.beforeEach((to, from, next) => {
  console.log(to,from)//
  // 不需要登陆就能进入的页面
  const nextRoute = ['login', 'register']
  if (nextRoute.indexOf(to.name) === -1) {
    // 未登录
    if (!localStorage.getItem('logined')) {
      next({
        name: 'login'
      })
    }else{
      next()
    }
  }
  // 已登录的情况再去登录页,跳转至首页
  if (to.name === 'login') {
    if (localStorage.getItem('logined')) {
      next({
        name: 'index'
      })
    }else{
      next()
    }
  }
})
axios.get('/heartbeat').then(res=>{
  if(res && res.data.code === 401){
    localStorage.removeItem('logined')
  }
  window.showMessage = true
  new Vue({
    router,
    store,
    render: h => h(App)
  }).$mount('#app')
})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容

  • 无题 湖静烟波美 清凉润寸心 敛眉依柳畔 朝暮伴君吟
    回彦秀阅读 133评论 0 1
  • 没有信手拈来的幸福,也没有不劳而获的成功。把每一件简单的事做好就是不简单,把每一件平凡的事做好就是不平凡。专注当下...
    自由猎人阅读 181评论 0 0
  • 我失眠了 虽然总是很晚很晚很晚才睡觉 但自从某一日知道自己再这样熬下去恐小命休矣 基本上到点就准备入睡了 闭上眼睛...
    NJ_Loey阅读 116评论 0 0
  • 前段时间,孩子的奶奶因为突发急性胆囊炎住进了陆军总院,经过一周的住院治疗,病情基本上康复了,但是这样一折腾...
    牛振雯阅读 172评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,520评论 28 53