02手写router路由了解实现的原理

react-router:实现了路由的核心功能

react-router-dom:基于react-router,加入了在浏览器运行环境下的一些功能。例如Link组件,会渲染一个a标签。

路由模式分为:BrowserRouter(history)(不带#号),和HashRouter(带#号)。前者使用pushState和popState事件构建路由,后者使用window.location.hash和hashchange事件构建路由。

           //构造函数的重载,可以看做是一个对象模板
            function Router(params){
                console.log(this);//this指这个构造函数,
                                  //现在的this对象,里面没有属性和方法。开始往this对象添加东西。
                console.log(params);//参数params,是下面已经实例化的对象
                
                this.routes= params.routes||[];//给this对象里,添加routes属性。用来记录配置信息。
                this.mode= params.mode||'hash';//给this对象里,添加mode属性。用来记录路由模式。
                console.log("this.mode:"+ this.mode);

                this.init=function(){   //给this对象里,添加init方法。作用:初始化。
                    var that =this; //这里的this指上面那个this对象
                   
                    });
                }
                this.init();
                
            }
            //实例化一个对象的时候,必然调用构造方法
            new Router({
                mode: 'hash',
                routes:[
                    { path:'/home',component:'<h1>主页</h1><h4>新一代前端工程师:我们啥都会</h4>'},
                    { path: '/news', component: '<h1>新闻</h1><h4>今天2020-07-01</h4>' },
                    { path: '/team', component: '<h1>团队</h1><h4>WEB前端工程师</h4>' },
                    { path: '/about', component: '<h1>关于</h1><h4>我们都要加油</h4>' },
                    { path: '*', redirect: '/home' }
                ]
            });
View Code

 

HTML DOM  querySelectorAll()方法

//querySelectorAll() 方法返回文档中匹配指定 CSS 选择器的所有元素,返回 NodeList 对象。
//NodeList 对象表示节点的集合。可以通过索引访问,索引值从 0 开始。
//节点列表不是一个数组!可以看做是一个对象的list。

document.querySelectorAll(".router")
document.querySelectorAll(".router").forEach(console.log);//es6的循环
View Code

HTML DOM  addEventListener()方法

//addEventListener() 方法用于向指定元素添加事件句柄。
//element.addEventListener(event, function, useCapture)
//event: 必须。字符串,指定事件名。
//function: 必须。指定要事件触发时执行的函数。
//useCapture: 可选。布尔值,指定事件是否在捕获或冒泡阶段执行。
                     //true - 事件句柄在捕获阶段执行
                     //false- false- 默认。事件句柄在冒泡阶段执行

item.addEventListener("click",function(e){
                            console.log(e);
                        });
View Code 

HTML DOM  event对象

/*Event 对象代表    事件的状态,*/
//比如事件在其中发生的  元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。

/*标准 Event 属性*/
//bubbles    返回布尔值,指示事件是否是起泡事件类型。
//cancelable    返回布尔值,指示事件是否可拥可取消的默认动作。
//currentTarget    返回其事件监听器触发该事件的元素。
//eventPhase    返回事件传播的当前阶段。
//target    返回触发此事件的元素(事件的目标节点)。
//timeStamp    返回事件生成的日期和时间。
//type    返回当前 Event 对象表示的事件的名称。

/*标准 Event 方法:(IE 的事件模型不支持这些方法:)*/
//initEvent()    初始化新创建的 Event 对象的属性。
//preventDefault()    取消事件的默认动作,通知浏览器不要执行与事件关联的默认动作。
event.preventDefault()
//stopPropagation()    不再派发事件。

//returnValue    如果设置了该属性,它的值比事件句柄的返回值优先级高。把这个属性设置为 fasle,可以取消发生事件的源元素的默认动作。
window.event.returnValue = false;  
View Code

JavaScript String对象

/*String 对象属性*/
//constructor    对创建该对象的函数的引用
//length    字符串的长度
//prototype    允许您向对象添加属性和方法


/*String 对象方法*/
//indexOf()    检索字符串。
stringObject.indexOf(searchvalue【,fromindex】)//可返回某个指定的字符串值在字符串中首次出现的位置。

//slice()    提取字符串的片断,并在新的字符串中返回被提取的部分。
stringObject.slice(start,end)//当start=end时,看做stringObject.slice(start)
View Code

Browser对象  location对象

/*Location 对象是 Window 对象的一个部分,可通过 window.location 属性来访问。*/

/*Location 对象方法*/
//assign()    加载新的文档。
//reload()    重新加载当前文档。

//replace()    用新的文档替换当前文档。
window.location.replace("http://www.w3school.com.cn")//replace() 方法不会在 History 对象中生成一个新的记录。当使用该方法时,新的 URL 将覆盖 History 对象中的当前记录。
复制代码


/*Location 对象属性*/
//hash    设置或返回从井号 (#) 开始的 URL(锚)。
//host    设置或返回主机名和当前 URL 的端口号。
//hostname    设置或返回当前 URL 的主机名。
//href    设置或返回完整的 URL。
//pathname    设置或返回当前 URL 的路径部分。
//port    设置或返回当前 URL 的端口号。
//protocol    设置或返回当前 URL 的协议。
//search    设置或返回从问号 (?) 开始的 URL(查询部分)。
View Code

 

posted @ 2021-03-14 18:31  Strugglinggirl  阅读(105)  评论(0编辑  收藏  举报