• vue-router简易的实现原理


     class VueRouter {
                constructor(options) {
                    this.$options = options;
                    this.routeMap = {};
                    // 路由响应式
                    this.app = new Vue({
                        data: {
                            current: "/"
                        }
                    });
                }
                i
                nit() {
                    this.bindEvents(); //监听url变化
                    this.createRouteMap(this.$options); //解析路由配置
                    this.initComponent(); // 实现两个组件
                }
                b
                indEvents() {
                    window.addEventListener("load", this.onHashChange.bind(this));
                    window.addEventListener("hashchange", this.onHashChange.bind(this));
                }
                o
                nHashChange() {
                    this.app.current = window.location.hash.slice(1) || "/";
                }
                c
                reateRouteMap(options) {
                    options.routes.forEach(item => {
                        this.routeMap[item.path] = item.component;
                    });
                }
                i
                nitComponent() {
                    // router-link,router-view
                    // <router-link to="">fff</router-link>
                    Vue.component("router-link", {
                        props: {
                            to: String
                        },
                        render(h) {
                            // h(tag, data, children)
                            return h("a", {
                                attrs: {
                                    href: "#" + this.to
                                }
                            }, [
                                this.$slots.default
                            ]);
                        }
                    });
                    // <router-view></router-view>
                    Vue.component("router-view", {
                        render: h => {
                            const comp = this.routeMap[this.app.current];
                            return h(comp);
                        }
                    });
                }
            }
            V
            ueRouter.install = function (Vue) {
                // 混入
                Vue.mixin({
                    beforeCreate() {
                        // this是Vue实例
                        if (this.$options.router) {
                            // 仅在根组件执行一次
                            Vue.prototype.$router = this.$options.router;
                            this.$options.router.init();
                        }
                    }
                });
            };

    以上是简易的实现过程,一下是我整理了一份思路导图

  • 相关阅读:
    MySQL优化---主从复制
    MySQL性能优化---优化方案
    MySQL性能优化---索引
    MySQL性能优化---定位慢查询
    Linux开机启动过程详解
    naginx
    Git搭建
    脚本中特殊字符
    Shell脚本
    简单Shell脚本(实例)
  • 原文地址:https://www.cnblogs.com/wyongz/p/11541048.html
Copyright © 2020-2023  润新知