zoukankan      html  css  js  c++  java
  • vue-router源码学习(一)

      因为v3.01版本中的   /src代码使用TypeScript进行书写,我这里仅仅用作模块学习,

      具体学习的还是 /dist/vue-router.js 代码。

    (一)基本使用方式

      JS代码

        // 定义路由规则
        const routes = [
            {
                name:'首页',
                path: '/',
                component: function (resolve) {
                    require.async(['js/modules/Index.js'], resolve);
                }
            },
            {
                name:'详情页产品列表页',
                path: '/detail/:params1/:params2',
                component: function (resolve) {
                    require.async(['js/modules/detail.js'], resolve);
                }
            },
            {
                name:'产品列表页',
                path: '/product',
    
                component: function (resolve) {
                    require.async(['js/modules/product.js'], resolve);
                }
            }
        ]
    
        // 创建一个路由器实例
        var router = new VueRouter({
            routes
        });
    
        //路由器会创建一个 App 实例,并且挂载到选择符 #app 匹配的元素上。
        const app = new Vue({
            router
        }).$mount('#app')
    js

      页面代码

    <div id="app">
        <h1>Basic</h1>
        <ul>
            <li><router-link to="/">首页</router-link></li>
            <li><router-link to="/detail/a/c">详情页</router-link></li>
            <li><router-link to="/product/">产品列表页</router-link></li>
        </ul>
        <router-view class="view"></router-view>
    </div>
    页面使用方式

      由于是学习,就不是webpack进行项目工程化。这里实用seajs去获取相应的组件信息。

      从实用角度分析: vue-router 插件给我们提供了两个组件:

      <router-view> 与 <router-link>,其中<router-view>是必需组件。

    (二)源码目录结构

       

     components: <router-view>与<router-link>的实现

     history:          路由的封装方式,此router 下的model : history,hash,abstract

     util:             各种功能函数,比较重要的是  path.js,route.js

       create-matcher:       在VueRouter--->   createMatcher()  创建匹配规则

     create-route-map:   在VueRouter --->createMatcher() 创建匹配规则

     index:              插件入口,即 VueRouter 构造函数

     install:             插件安装方式,即在Vue beforeCreate生命周期时,vue-router开始初始化。

    (三)VueRouter的定义及自启动

        vue-router 插件的启用是自动启用的,与 vuex 插件启用方式是不同的。

      整个Index大致结构如下:

      

         主要做了三件事:

      1、定义VueRouter对象,包括 私有变量、构造函数以及原型方法。

      2、给插件对象增加 install 方法用来安装插。

      3、浏览器环境且Vue存在 则 自动使用插件,进行一系列初始化(Vuex则是在 Store 实例化时启动)。

      VueRouter的构造函数主要干了两件事:

      1、通过 createMather() ,根据用户路由配置规则生成 

         (1) 根据path 对应的路由记录

         (2) 根据name对应的路由记录 map 

                 返回的是两个函数 match() 以及 addRoutes(),方便后续调用匹配相应规则。

      2、根据传入的model (默认是‘hash'方式)实例化具体的 history

    (四)VueRouter的启动

      

     

  • 相关阅读:
    Caused by: java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.MetadataPro
    Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException
    让你的C程序更有效率的10种方法
    c++效率浅析
    Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition
    Caused by: java.lang.ClassNotFoundException: javax.transaction.TransactionManager
    Caused by: java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
    Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWo
    Caused by: java.lang.ClassNotFoundException: org.jbpm.pvm.internal.processengine.SpringHelper
    Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor
  • 原文地址:https://www.cnblogs.com/xianrongbin/p/2831679.html
Copyright © 2011-2022 走看看