Vue实例生命周期

vue生命周期之beforeCreate

实例创建之前除标签外,所有的vue需要的数据,事件都不存在

vue生命周期之created

实例创建之后,data和事件已经被解析到,el还没有找到

vue生命周期之beforeMount

开始找标签,数据还没有被渲染,事件也没有被监听

vue生命周期之mounted

开始渲染数据,开始监听事件

vue生命周期之beforeUpdata

数据已经被修改在虚拟DOM,但没有被渲染到页面上

vue生命周期之updata

开始使用Diff算法,将虚拟DOM中的修改应用大页面上,此时真实DOM中数据被修改

vue生命周期之beforeDestory

所有的数据都存在

vue生命周期之destory

所有的数据都有(虚拟DOM中找)

<keep-alive></keep-alive>vue提供的用来缓存被消除的标签

用activated和deactivated取代了beforeUpdate和destory的执行

vueRoter

实现原理

<div id='app'>
   <a href="#/login">登录</a>
   <a href="#/register">注册</a>
</div>
<script>
   let oDiv = document.getElementById('#app');
   window.onhashchange = function(){
       switch (location.hash){
           case '#/login':
               oDiv.innerHTML = `<h1>这是登录</h1>`;
               break;
           case '#/register':
               oDiv.innerHTML = `<h1>这是注册</h1>`;
               break;
      }
  }
</script>

安装使用

// 直接下载安装  vue-router.js 地址:https://router.vuejs.org/zh/installation.html
<div id="app">

</div>

<script>
   // 第一步,在vue根实例中使用VueRouter
   Vue.use(VueRouter);

   let Home = {
       template: `<div><h1>这是主页面</h1></div>`
  };
   let Login = {
       template: `<div><h1>这是登录页面</h1></div>`
  };
   let Register = {
       template: `<div><h1>这是注册页面</h1></div>`
  };

   let App = {
       // 第四步
       // router-link会渲染成a标签,to会变成href属性,to后面是routers中定义的路径
       // 第五步
       // router-view页面内容的渲染出口
       template: `<div>
<router-link to='/'>首页</router-link>
<router-link to='/login'>登录</router-link>
<router-link to='/register'>注册</router-link>
<router-view></router-view>
</div>`,

  };
   // 第二步,创建VueRouter对象
   // 本质上是将路径和页面内容绑定了对应关系
   let router = new VueRouter({
       routes: [
           // 对应关系
          {
               path: '/',
               component: Home,
          },
          {
               path: '/login',
               component: Login,
          },
          {
               path: '/register',
               component: Register,
          },
      ]
  });
   new Vue({
       el: '#app',
       // 第三步,在根实例中注册router对象
       router: router,
       template: '<App/>',
       components: {
           App,
      }
  })
</script>

命名路由

<div id="app"></div>

<script>
   // 第一步,在vue根实例中使用VueRouter
   Vue.use(VueRouter);

   let Home = {
       template: `<div><h1>这是主页面</h1></div>`
  };
   let Login = {
       template: `<div><h1>这是登录页面</h1></div>`
  };
   let Register = {
       template: `<div><h1>这是注册页面</h1></div>`
  };

   let App = {
       // 第四步
       // router-link会渲染成a标签,to会变成href属性,to后面是routers中定义的路径
       // 第五步
       // router-view页面内容的渲染出口
       template: `<div>
<router-link :to='{name: "home"}'>首页</router-link>
<router-link :to='{name: "login"}'>登录</router-link>
<router-link :to='{name: "register"}'>注册</router-link>
<router-view></router-view>
</div>`,

  };
   // 第二步,创建VueRouter对象
   // 本质上是将路径和页面内容绑定了对应关系
   let router = new VueRouter({
       routes: [
           // 对应关系
          {
               name: 'home',
               path: '/',
               component: Home,
          },
          {
               name: 'login',
               path: '/login',
               component: Login,
          },
          {
               name: 'register',
               path: '/register',
               component: Register,
          },
      ]
  });
   new Vue({
       el: '#app',
       // 第三步,在根实例中注册router对象
       router: router,
       template: '<App/>',
       components: {
           App,
      }
  })
</script>

路由参数的实现

<script>
   // 之真实的场景中,xxx/1 带有参数
   // 第一步,在vue根实例中使用VueRouter
   Vue.use(VueRouter);
   
   let Home = {
       template: `<div><h1>这是主页面</h1></div>`
  };
   let userParams = {
       template: `<div><h1>这是用户一的信息</h1></div>`
  };
   let userParams = {
       template: `<div><h1>这是用户二的信息</h1></div>`
  };
   
   let App = {
       // 第四步
       // router-link会渲染成a标签,to会变成href属性,to后面是routers中定义的路径
       // 第五步
       // router-view页面内容的渲染出口
       template: `<div>
<router-link :to='{name: "home"}'>首页</router-link>
<router-link :to='{name: "userParams", params: {userId: 1}}>登录</router-link>
<router-link :to='{name: "userQuery", query: {userId: 2}}'>注册</router-link>
<router-view></router-view>
</div>`,
       
  };
   // 第二步,创建VueRouter对象
   // 本质上是将路径和页面内容绑定了对应关系
   let router = new VueRouter({
       routes: [
           // 对应关系
          {
               name: 'hoem',
               path: '/',
               component: Home,
          },
          {
               // xxx/1
               name: 'userParams',
               path: '/user/:userId',
               component: userParams,
          },
          {
               //xxx/?userId=1
               name = 'userQuery',
               path: '/user',
               compontennt: userQuery,
          }
      ]
  })
   new Vue({
       el: '#app',
       // 第三步,在根实例中注册router对象
       router: router,
       components: {
           App,
      }
  })
</script>

路由参数的实现原理

<div id="app"></div>

<script>
   // 之真实的场景中,xxx/1 带有参数
   // 第一步,在vue根实例中使用VueRouter
   Vue.use(VueRouter);

   let Home = {
       template: `<div><h1>这是主页面</h1></div>`,
       mounted(){
           console.log(this.$route);
      }
  };
   let userParams = {
       template: `<div><h1>这是用户一的信息</h1></div>`,
       mounted(){
           console.log(this.$route);
      }
  };
   let userQuery = {
       template: `<div><h1>这是用户二的信息</h1></div>`
  };

let App = {
       // 第四步
       // router-link会渲染成a标签,to会变成href属性,to后面是routers中定义的路径
       // 第五步
       // router-view页面内容的渲染出口
       template: `<div>
<router-link :to='{name: "home"}'>首页</router-link>
<router-link :to='{name: "userParams", params: {userId: 1}}'>登录</router-link>
<router-link :to='{name: "userQuery", query: {userId: 2, id: 1, ss: 4}}'>注册</router-link>
<router-view></router-view>
</div>`,

  };
   // 第二步,创建VueRouter对象
   // 本质上是将路径和页面内容绑定了对应关系
   let router = new VueRouter({
       routes: [
           // 对应关系
          {
               name: 'home',
               path: '/',
               component: Home,
          },
          {
               // xxx/1
               name: 'userParams',
               path: '/user/:userId',
               component: userParams,
          },
          {
               //xxx/?userId=2
               name : 'userQuery',
               path: '/user',
               component: userQuery,
          }
      ]
  });
   new Vue({
       el: '#app',
       template: `<App/>`,
       // 第三步,在根实例中注册router对象
       router: router,
       components: {
           App,
      }
  })
</script>

子路由

<div id="app"></div>

<script>
   // 第一步,在vue根实例中使用VueRouter
   Vue.use(VueRouter);

   let Home = {
       template: `<div><h1>这是主页面</h1></div>`,
  };
   let Courses = {
       template: `<div><h1>这是课程页面</h1>
  <router-link to='/courses/lightcourses'>免费</router-link>
<router-link to='/courses/degreecourses'>收费</router-link>
<router-view></router-view>
  </div>`,
  };
   let Lightcourses = {
       template: `<div><h1>这是轻课页面</h1></div>`,
  };
   let Degreecourses = {
       template: `<div><h1>这是学位课程页面</h1></div>`,
  };

   let App = {
       // 第四步
       // router-link会渲染成a标签,to会变成href属性,to后面是routers中定义的路径
       // 第五步
       // router-view页面内容的渲染出口
       template: `<div>
<router-link :to='{name: "home"}'>首页</router-link>
<router-link :to='{name: "courses"}'>登录</router-link>
<router-view></router-view>
</div>`,
  };
   // 第二步,创建VueRouter对象
   // 本质上是将路径和页面内容绑定了对应关系
   let router = new VueRouter({
       routes: [
           // 对应关系
          {
               name: 'home',
               path: '/',
               component: Home,
          },
          {
               name: 'courses',
               path: '/courses',
               component: Courses,
               children: [
                  {
                       path: '/courses/lightcourses',
                       component: Lightcourses
                  },
                  {
                       path: '/courses/degreecourses',
                       component: Degreecourses
                  }
              ]
          },
      ]
  });
   new Vue({
       el: '#app',
       // 第三步,在根实例中注册router对象
       router: router,
       template: '<App/>',
       components: {
           App,
      }
  })
</script>

子路由append

<div id="app"></div>
<script>
   // 第一步,在vue根实例中使用VueRouter
   Vue.use(VueRouter);

   let Home = {
       template: `<div><h1>这是主页面</h1></div>`,
  };
   let Courses = {
       template: `<div><h1>这是课程页面</h1>
                   <router-link :to='{name: "lightcourses" }' append >轻课</router-link>
<router-link :to='{name: "degreecourses" }'>学位课</router-link>
<router-view></router-view>
  </div>`,
  };
   let LightCourses = {
       template: `<div><h1>这是轻课页面</h1></div>`,
  };
   let DegreeCourses = {
       template: `<div><h1>这是学位课程页面</h1></div>`,
  };

   let App = {
       // 第四步
       // router-link会渲染成a标签,to会变成href属性,to后面是routers中定义的路径
       // 第五步
       // router-view页面内容的渲染出口
       template: `<div>
<router-link :to='{name: "home"}'>首页</router-link>
<router-link :to='{name: "courses"}'>课程</router-link>
<router-view></router-view>
</div>`,

  };
   // 第二步,创建VueRouter对象
   // 本质上是将路径和页面内容绑定了对应关系
   let router = new VueRouter({
       routes: [
           // 对应关系
          {
               name: 'home',
               path: '/',
               component: Home,
          },
          {
               name: 'courses',
               path: '/courses',
               component: Courses,
               children: [
                  {
                       name: 'lightcourses',
                       path: 'lightcourese',
                       component: LightCourses
                  },
                  {
                       name: 'degreecourses',
                       path: 'degreecourses',
                       component: DegreeCourses
                  },
              ]
          },
      ]
  });
   new Vue({
       el: '#app',
       // 第三步,在根实例中注册router对象
       router: router,
       template: "<App/>",
       components: {
           App,
      }
  })
</script>

路由重定向

<script>
   // 第一步,在vue根实例中使用VueRouter
   Vue.use(VueRouter);
   
   let Home = {
       template: `<div><h1>这是主页面</h1></div>`,
  };
   let Pay = {
       template: `<div><h1>这是支付页面</h1></div>`,
  };
   let Login = {
       template: `<div><h1>这是登录页面</h1></div>`,
  };
   
   let App = {
       // 第四步
       // router-link会渲染成a标签,to会变成href属性,to后面是routers中定义的路径
       // 第五步
       // router-view页面内容的渲染出口
       template: `<div>
<router-link :to='{name: "home"}'>首页</router-link>
<router-link :to='{name: "login",}>登录</router-link>
<router-link :to='{name: "pay",}>支付</router-link>
<router-view></router-view>
</div>`,
       
  };
   // 第二步,创建VueRouter对象
   // 把a标签的锚点值和页面内容绑定了对应关系
   let router = new VueRouter({
       routes: [
           // 对应关系
          {
               name: 'hoem',
               path: '/',
               component: Home,
          },
          {
               name: 'login',
               path: '/login',
               component: Login,
          },
          {
               name: 'pay',
               path: '/pay',
               redirect: '/login',
               component: Pay,
          },
      ]
  })
   new Vue({
       el: '#app',
       // 第三步,在根实例中注册router对象
       router: router,
       components: {
           App,
      }
  })
</script>

路由的钩子函数

<div id="app"></div>
<script>
   // 第一步,在vue根实例中使用VueRouter
   Vue.use(VueRouter);

   let Home = {
       template: `<div><h1>这是主页面</h1></div>`,
  };
   let Pay = {
       template: `<div><h1>这是支付页面</h1></div>`,
  };
   let Login = {
       template: `<div><h1>这是登录页面</h1></div>`,
  };

   let App = {
       // 第四步
       // router-link会渲染成a标签,to会变成href属性,to后面是routers中定义的路径
       // 第五步
       // router-view页面内容的渲染出口
       template: `<div>
<router-link :to='{name: "home"}'>首页</router-link>
<router-link :to='{name: "login"}'>登录</router-link>
<router-link :to='{name: "pay"}'>支付</router-link>
<router-view></router-view>
</div>`,

  };
   // 第二步,创建VueRouter对象
   // 把a标签的锚点值和页面内容绑定了对应关系
   let router = new VueRouter({
       routes: [
           // 对应关系
          {
               name: 'home',
               path: '/',
               component: Home,
          },
          {
               name: 'login',
               path: '/login',
               component: Login,
          },
          {
               name: 'pay',
               path: '/pay',
               meta: { required_login: true },
               component: Pay,
          },
      ]
  });

   // 通过router对象的beforeEach(function(to, from, next))
   router.beforeEach(function(to, from, next){
       console.log('to', to);
       console.log("from", from);
       console.log("next", next);
       if (to.meta.required_login){
           next('/login');
      }
       else{
           next();
      }
  });
   new Vue({
       el: '#app',
       // 第三步,在根实例中注册router对象
       router: router,
       components: {
           App,
      },
       template: '<App/>',
  })
</script>

路径去掉#号

在router对象中加入mode: 'history'

<div id="app"></div>
<script>
   // 第一步,在vue根实例中使用VueRouter
   Vue.use(VueRouter);

   let Home = {
       template: `<div><h1>这是主页面</h1></div>`,
  };
   let Pay = {
       template: `<div><h1>这是支付页面</h1></div>`,
  };
   let Login = {
       template: `<div><h1>这是登录页面</h1></div>`,
  };

   let App = {
       // 第四步
       // router-link会渲染成a标签,to会变成href属性,to后面是routers中定义的路径
       // 第五步
       // router-view页面内容的渲染出口
       template: `<div>
<router-link :to='{name: "home"}'>首页</router-link>
<router-link :to='{name: "login"}'>登录</router-link>
<router-link :to='{name: "pay"}'>支付</router-link>
<router-view></router-view>
</div>`,

  };
   // 第二步,创建VueRouter对象
   // 把a标签的锚点值和页面内容绑定了对应关系
   let router = new VueRouter({
       mode: 'history', // 去掉# 号
       routes: [
           // 对应关系
          {
               name: 'home',
               path: '/',
               component: Home,
          },
          {
               name: 'login',
               path: '/login',
               component: Login,
          },
          {
               name: 'pay',
               path: '/pay',
               meta: { required_login: true },
               component: Pay,
          },
      ]
  });

   // 通过router对象的beforeEach(function(to, from, next))
   router.beforeEach(function(to, from, next){
       console.log('to', to);
       console.log("from", from);
       console.log("next", next);
       if (to.meta.required_login){
           next('/login');
      }
       else{
           next();
      }
  });
   new Vue({
       el: '#app',
       // 第三步,在根实例中注册router对象
       router: router,
       components: {
           App,
      },
       template: '<App/>',
  })
</script>

Vue实例生命周期+vueRoter的更多相关文章

  1. vue生命周期图示中英文版Vue实例生命周期钩子

    vue生命周期图示中英文版Vue实例生命周期钩子知乎上近日有人发起了一个 “react 是不是比 vue 牛皮,为什么?” 的问题,Vue.js 作者尤雨溪12月4日正面回应了该问题.以下是尤雨溪回复 ...

  2. vue实例生命周期

    实例生命周期 var vm = new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 实例 console.log('a i ...

  3. vue实例生命周期详解

    每个 Vue 实例在被创建之前都要经过一系列的初始化过程. 例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 DOM . 在这个过程中,实 ...

  4. 【Vue实例生命周期】

    目录 实例创建之前执行--beforeCreate 实例创建之后执行--created 挂载之前执行--beforeMount 挂载之后执行--mounted 数据更新之前执行--beforeUpda ...

  5. vue 实例生命周期

    compile template into render function 编译模板渲染方法 compile el’s ouoterHtml as template 将el的outerHTML当做模板 ...

  6. vue入门:(底层渲染实现render函数、实例生命周期)

    vue实例渲染的底层实现 vue实例生命周期 一.vue实例渲染的底层实现 1.1实例挂载 在vue中实例挂载有两种方法:第一种在实例化vue时以el属性实现,第二种是通过vue.$mount()方法 ...

  7. Vue:生命周期

    一.什么是vue的生命周期 Vue中的生命周期是指组件从创建到销毁的一系列过程.看下面这张官方文档的图: 从图片中可以看出Vue的整个生命周期包括8个状态,按照先后顺序分别为: beforeCreat ...

  8. 前端(二十)—— vue介绍:引用vue、vue实例、实例生命周期钩子

    vue 一.认识Vue 定义:一个构建数据驱动的 web 界面的渐进式框架 优点: 1.可以完全通过客户端浏览器渲染页面,服务器端只提供数据 2.方便构建单页面应用程序(SPA) 3.数据驱动 =&g ...

  9. 8.vue的生命周期

    Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁的过程,就是生命周期 ...

随机推荐

  1. macd背离的级别

    1分钟的背离可以忽略不看. 5分钟的背离可以预测未来5-6个小时的股价. 15分钟级别的背离可以预测未来24小时之内的股价. 30分钟级别的背离可以做中线. 周线背离可以影响1-2年的股价. 背离级别 ...

  2. workerman介绍

    WorkerMan的特性 1.纯PHP开发 使用WorkerMan开发的应用程序不依赖php-fpm.apache.nginx这些容器就可以独立运行. 这使得PHP开发者开发.部署.调试应用程序非常方 ...

  3. 使用mutt+msmtp做linux邮件客户端

      下载MSMTP wget http://nchc.dl.sourceforge.net/sourceforge/msmtp/msmtp-1.4.17.tar.bz2 tar xvf msmtp-1 ...

  4. SqL注入攻击实践

    研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 缓冲区溢出原理 缓冲区溢出是指当计算机程序向缓冲区内填充的数据位数超过了缓冲区本身的容量.溢出的数据覆盖在合法数据上.理想情况是,程序检查数据长 ...

  5. Spring笔记04(DI(给属性赋值),自动装配(autowire))

    给不同数据类型注入值: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="h ...

  6. javacv实现实时视频截图和录像服务easyCV

    本项目维护于github:https://github.com/eguid/easyCV 1.介绍 本项目基于javaCV1.4.x. 其中实现了 (1)实时视频截图服务(支持rtsp/rtmp/ht ...

  7. setsockopt函数功能及参数详解

    Socket描述符选项[SOL_SOCKET] #include <sys/socket.h> int setsockopt( int socket, int level, int opt ...

  8. poj2492A Bug's Life——带权并查集

    题目:http://poj.org/problem?id=2492 所有元素加入同一个并查集中,通过其偏移量%2将其分类为同性与异性,据此判断事件. 代码如下: #include<iostrea ...

  9. Ubuntu Hadoop环境搭建(Hadoop2.6.5+jdk1.8.0_121)

    1.JDK的安装 2.配置hosts文件(这个也要拷贝给所有slave机,scp /etc/hosts root@slave1:/etc/hosts) gedit /etc/hosts 添加: 122 ...

  10. fastIO模板

    freadIO整理 namespace fastIO{ #define BUF_SIZE 100000 ; inline char nc() { static char buf[BUF_SIZE],* ...