当前位置: 首页 > news >正文

网站运营方案案例/短视频推广策略

网站运营方案案例,短视频推广策略,三端互通传奇手游找服网站,wordpress 侧边栏跟随模拟 vue-router hash 模式的基础功能实现模拟 vue-router 的实现实现 vue-router 的核心步骤构建类构建响应式数据属性 currentinstall方法初始化 router-link,router-view 组件match 匹配路由监听 hash 改变模拟 vue-router 的实现 以下内容基于 vue-router hash…

模拟 vue-router hash 模式的基础功能实现

  • 模拟 vue-router 的实现
    • 实现 vue-router 的核心步骤
      • 构建类
      • 构建响应式数据属性 current
      • install方法
      • 初始化 router-link,router-view 组件
      • match 匹配路由
      • 监听 hash 改变

模拟 vue-router 的实现

以下内容基于 vue-router hash 模式来实现

实现 vue-router 的核心步骤

  • 构建 vue-router 类
  • 构建响应式数据属性 current,动态渲染 dom
  • 添加静态方法 install,完成 Vue 模块的注册
  • 初始化 router-link,router-view 组件,负责路由跳转和组件渲染
  • 通过 match 函数匹配路由,找到需要渲染的组件
  • 监听 hash 的变化,动态改变 current 属性

构建类

class MiniRouter {constructor(options) {// 存储参数this.options = options// 存储路由this.routes = options.routes// 初始化函数this.init()}init() {// 所有初始化操作放在这里}
}

构建响应式数据属性 current

为了可以在路由发生变化的时候去更新视图,我们可以实例化一个响应式对象 data,并给定 响应式属性 current 来记录当前的 hash,当 current 发生变化的时候,vue 就会动态更新视图

class MiniRouter {constructor(options) {...// 创建一个响应式的属性 current,当 current 改变的时候就会重新渲染 domthis.data = $Vue?.observable({// 给定初始 hashcurrent: window.location.hash.replace(/#/, '')})}
}

install方法

当使用 Vue.use(MiniRouter) 的时候,他要求传入的对象,必须存在一个 install 方法,它会自动帮我们执行这个方法,并将 Vue 构造函数传入该方法。所以我们可以在 install 方法中编写一些初始化代码。

而且因为 MiniRouter 是一个类,所以 install 方法应该是一个静态方法

let $Vue = null
let installed = false
class MiniRouter {// install 方法,是用于 vue 来注册该组件的必备方法static install(Vue) {// 判断当前插件是否被安装if (installed) {return}// 这里我使用局部变量来缓存模块安装判断installed = true// 局部保存 Vue 构造函数,将来会用到$Vue = Vue// console.log('route installed')// 当 vue 实例化之后,将 router 实例注入到 vue 实例中$Vue.mixin({beforeCreate() {if (this.$options.router) {// 将 router 实例保存到 Vue 的 prototype 上$Vue.prototype.$router = this.$options.router}}})}...
}

初始化 router-link,router-view 组件

router-link 组件是用于改变当前url hash 值和改变属性 current 值的组件

router-view 组件则是负责在 hash 发生变化后,将匹配到的路由组件渲染到页面上

class MiniRouter {...initComponents() {// 初始化一个 route-link 组件$Vue.component('router-link', {// 接收 to 参数,指定跳转连接props: {to: String},// 渲染 domrender(h) {return h('a', {attrs: {href: this.to},on: {click: this.clickHandler}}, [this.$slots.default])},methods: {// 指定组件的点击事件clickHandler(e) {// 通过 push State 改变 hashhistory.pushState({}, '', `#${this.to}`)// 改变 current 值,动态渲染视图this.$router.data.current = this.to// 阻止默认事件跳转e.preventDefault()}}})const self = this// 初始化一个 router-view 组件,进行组件渲染$Vue.component('router-view', {render(h) {// 匹配路由对象,找到需要渲染的组件let cm = self.match(self.data.current)?.componentreturn h(cm)}})}
}

initComponents 方法需要在 init 中执行

match 匹配路由

match 函数可以说是这里最核心的方法,它可以根据传入的 path,找到与之匹配的路由对象和部分参数。

class MiniRouter {...match(path) {// 存储匹配到的路由及部分参数let matchRoute = null// 遍历所有的路由,知道匹配到对应的路由this.routes.every(route => {// 通过 getRouteType 判断当前 route 的类型let routeType = this.getRouteType(route.path)// 找到 route 匹配的规则,用于判断当前路由和传入的 path 是否匹配let routeMethod = this[`match${routeType}Route`]// 如果规则不存在,则跳过if (!routeMethod) {return true}// 判断路由和 path 是否匹配,并返回对应的数据参数let matchResult = routeMethod(path, route)if (matchResult) {// 匹配成功,储存返回的参数,并跳出循环matchRoute = matchResultreturn false}// 进行下一次循环return true})// 返回匹配结果,若没有匹配成功则返回 nullreturn matchRoute}
}

match 函数内部还有其他的方法,这里不一一阐述,有兴趣可以看源码。核心就是通过 getRouteType 找到路由的类型(静态路由,动态路由,统配符路由),然后找到对应类型下的路由匹配规则this[match${routeType}Route],进行匹配和返回。

监听 hash 改变

最后,我们需要通过监听 popState 来监听 hash 的改变,从而动态改变 视图,这一步主要是监听浏览器的前进,后退,或者用户直接改变hash的操作

class MiniRouter {...initEvent() {document.addEventListener('popstate', () => {this.data.current = window.location.hash.replace(/#/, '')})}
}

initEvent 方法需要在 init 中执行


以上内容仅供学习参考,如需完整代码,可以私聊我

http://www.lbrq.cn/news/815887.html

相关文章:

  • 东莞网站平面设计/百度推广点击软件
  • 用web做的网站吗/常州网站建设书生商友
  • 校园网站建设的意义/搜索引擎优化的含义
  • 怎么做游戏测评视频网站/火狐搜索引擎
  • 学校资源网站建设方案/除了91还有什么关键词
  • 光电网站设计/深圳哪里有网络推广渠避
  • ecshop做企业网站/广告推广怎么做最有效
  • 特色食品网站建设策划书/海外营销方案
  • 如何做网站结构分析/草莓永久地域网名入2022
  • 卡密商城平台/seo宣传网站
  • 公司网站开发模板/属于网络营销的特点是
  • 银川制作网站/自己怎么优化网站排名
  • wap手机建站平台/体验式营销经典案例
  • 招商网站大全/网站如何做优化推广
  • 做新闻的网站怎样赚钱/湖南企业seo优化
  • 吉林建设监理协会网站/网络宣传的方法有哪些
  • 毕业设计做视频网站设计/视频专用客户端app
  • 深圳网站公司哪家好/网站优化要做哪些
  • 为什么网站建设还要续费/qq空间刷赞网站推广
  • 电脑系统做的好的网站/今日新闻摘抄十条
  • 公司母婴室建设的意义/深圳优化网站
  • ps做网站要求/青岛网站制作推广
  • 深圳做网站要多少/市场调研报告总结
  • 苏州市姑苏区疫情防控电话/seo的主要分析工具
  • 网站上的个人词条怎么做的/互联网营销推广渠道
  • 网站建设项目汇报/会计培训班需要学多长时间
  • 邯郸做移动网站费用/高端网站建设
  • 做网站需要向客户了解什么/360上网安全导航
  • 做海外市场什么网站推广/淘宝店铺运营
  • 中山创海软件网站建设/最新中国新闻
  • 【408二轮强化】数据结构——线性表
  • LeetCode 1074:元素和为目标值的子矩阵数量
  • HighlightingSystem
  • KTO:基于行为经济学的大模型对齐新范式——原理、应用与性能突破
  • 大型微服务项目:听书——12 数据一致性自定义starter封装缓存操作
  • C++五子棋