Vue.js系列之vue-router(中)(4)

原创 2017年01月03日 17:55:57

说明:

我们项目现在用的是:vue2.0 + vue-cli + webpack + vue-router2.0 + vue-resource1.0.3
如果大家在实践的过程中与本文所说的内容有较大区别的话看看是不是版本问题。
本文是一系列文章,在我对Vue有了更深刻的理解认识之后会对文章及时进行修改或更正。欢迎大家批评指出错误。以下是已完成的文章列表。

1. Vue.js系列之项目搭建(1)
2. Vue.js系列之项目结构说明(2)
3. Vue.js系列之vue-router(上)(3)


补充

对于上篇分享的router.js文件补充以下三点:

1.新建好的router.js文件要想起作用,需要在main.js中import进来。

/*引入路由设置*/
import "./routers.js"

2.如果你在options里声明了挂载的el,就不用再手动mount了

var app = new Vue({
    el: '#app',  //不需要
    router,
    render: h => h(App) //新添加的函数操作
}).$mount('#app');

3.第二点看到,我们新加了render: h => h(App) 一开始我没看懂,直接注释运行看下,结果<div id="app"></div> 这个容器里面就啥也没有渲染出来。我也不怎么理解,如果有大牛清楚的恳请留言指导一下啊。但是我还是查了一下资料。

//=> 是ES6的箭头语法
// ES5  
(function (h) {  
  return h(App);  
});  

// ES6  
h => h(App); 

官方文档说明1:

render: function (createElement) {
    return createElement(
      'h' + this.level,   // tag name 标签名称
      this.$slots.default // 子组件中的阵列
    )
  }

官方文档说明2:
render
类型:Function
详细:字符串模板的代替方案,允许你发挥 JavaScript 最大的编程能力。render 函数接收一个 createElement 方法作为第一个参数用来创建 VNode。
我是这么理解的,我们的路由跳转时,定位到了一个组件进行渲染,但是之前app这个容器里面是有其他组件的,我们不能直接添加进去,只能把app里面的模板文件替换掉,所以用这个字符串模板的代替方案render(不知道对不对,真心请大神指出,大家这里略过吧)。

懒加载

懒加载的必要性:

1.解决样式冲突问题
2.解决页面资源加载问题
3.路由被访问时才加载对应组件,提高应用加载效率

具体代码写法

关键我们要做的就是把之前普通import进来的组件定义成异步组件。
前:

import home form "./components/home"  
import login form "./components/login" 

后:

const home = resolve => require(['./home.vue'], resolve)
const login = resolve => require(['./login.vue'], resolve)

Router构造详细配置

const router = new VueRouter({
    mode: 'history',//history: 依赖 HTML5 History API 和服务器配置。
    base: __dirname,
    linkActiveClass:'link-active',
    scrollBehavior (to, from, savedPosition) {
      if (savedPosition) {
        return savedPosition
      } else {
        return { x: 0, y: 0 }
      }
    }
    routes
}) 

mode
默认’hash’值,但是hash看起来就像无意义的字符排列,不太好看也不符合我们一般的网址浏览习惯。
当你使用 history 模式时,URL 就像正常的 url,例如 http://wx.hq88.com/lms/,也好看!

base
默认值: “/”,应用的基路径,一般就是项目的根目录,webpack中有配置好。

var projectRoot = path.resolve(__dirname, '../')

linkActiveClass
默认值: “router-link-active”,就是当前组件被激活,相应路由会自动添加类”router-link-active”,这里是为了全局设置激活类名,如果不设置,直接用默认的也是可以的。

scrollBehavior
通过这个这个属性(是个函数),可以让应用像浏览器的原生表现那样,在按下 后退/前进 按钮时,简单地让页面滚动到顶部或原来的位置。

完整路由代码

const scrollBehavior = (to, from, savedPosition) => {
      if (savedPosition) {
        return savedPosition
      } else {
        return { x: 0, y: 0 }
      }
    }

routes: [
    {
      path: '/',
      name: 'home',
      component: function(reslove){
        return require(['./components/home'],reslove)
      }
    },
    {
      path: '/login',
      name: 'login',
      component: function(reslove){
        return require(['./components/login/login'],reslove)
      }
    }
 ]
// 创建一个路由器实例,并且配置路由规则
const router = new VueRouter({
    mode: 'history',
    base: __dirname,
    linkActiveClass:'link-active',
    scrollBehavior,
    routes
});
//创建和挂载根实例
const app = new Vue({
  router: router,
  render: h => h(App)
}).$mount('#app');

总结

中篇主要对上篇遗漏的点进行了补充,分享了 懒加载的实现以及Router构造详细配置,最终形成了我们项目中用的router.js。下篇我将继续分享路由知识,主要是一些小的知识点,但是在应用的过程中不可或缺。

1.当前路由添加激活状态active-class
2.路由跳转时添加过渡动效
3.路由传参及命名路由
4.编程式导航
5.router-link的其他表现形式

版权声明:本文为博主原创文章,欢迎转载和发表评论,转载请注明出处。

相关文章推荐

认识Vue.js+Vue.js的优缺点+和与其他前端框架的区别

首先,我们先了解什么是MVX框架模式? MVX框架模式:MVC+MVP+MVVM 1.MVC:Model(模型)+View(视图)+controller(控制器),主要是基于分层的目的,让彼此的职...

vue.js的devtools安装

安装 1.github下载地址:https://github.com/vuejs/vue-devtools 2.下载好后进入vue-devtools-master工程  执行npm install...

windows下vue-cli及webpack 构建网站(二)导入bootstrap样式

1、先安装好vue-cli,如果还没有安装好的可以参考:《windows下vue-cli及webpack 构建网站(一)环境安装》 2、安装好之后Vue的欢迎界面,我们要做个例子导入bootstrap...

FE - 走向Node与Webpack 之路 - Vue 数据过滤与组件通讯

1. vue 数据过滤数据过滤,可以通过全局 Vue.filter 定义规则,也可以局部实现过滤。局部过滤: export default { name: 'app', ...

从高考到程序员——我一直在寻找答案

我曾是少年  我从小生活在小乡镇上,除了课本,一台电视机和外公出船带回来的二手书就是我了解世界的所有途径。外婆年轻的时候在合作社当过会计,所以小学四年级以前的数学都是她给我辅导的,每天晚上她还会给我削...

axios在vue中的简单配置与使用

尤雨溪之前在微博发布消息,不再继续维护vue-resource,并推荐大家开始使用 axios 。 一、axios 简介 axios 是一个基于Promise 用于浏览器和...

使用Vue-Router 2实现路由功能

注意:vue-router 2只适用于Vue2.x版本,下面我们是基于vue2.0讲的如何使用vue-router 2实现路由功能。 推荐使用npm安装。 npm install vue-rout...

2017年,我要怎么学前端

今天本来是要写一篇技术文章的,可是啊可是,第一天发生的事情太美好,美好的没心情写技术文章了。我来跟大家复盘一下今天发生的事情。 美好的第一天开始 上午也没什么事,就起来洗澡洗漱,扫地拖地打...

vue-lazyload图片懒加载实战

插件地址:vue-lazyload 以下做一个最简答的示例: img{ border: none; } ...

基于vue+vuex+localStorage开发的本地记事本

本文采用vue2.0+vuex+localStorage+sass+webpack,实现一个本地存储的记事本。兼容PC端和移动端。在线预览地址: DEMO 功能说明 支持回车添加事件 支持事...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)