Vue实例生命周期+vueRoter
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的更多相关文章
- vue生命周期图示中英文版Vue实例生命周期钩子
vue生命周期图示中英文版Vue实例生命周期钩子知乎上近日有人发起了一个 “react 是不是比 vue 牛皮,为什么?” 的问题,Vue.js 作者尤雨溪12月4日正面回应了该问题.以下是尤雨溪回复 ...
- vue实例生命周期
实例生命周期 var vm = new Vue({ data: { a: 1 }, created: function () { // `this` 指向 vm 实例 console.log('a i ...
- vue实例生命周期详解
每个 Vue 实例在被创建之前都要经过一系列的初始化过程. 例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 DOM . 在这个过程中,实 ...
- 【Vue实例生命周期】
目录 实例创建之前执行--beforeCreate 实例创建之后执行--created 挂载之前执行--beforeMount 挂载之后执行--mounted 数据更新之前执行--beforeUpda ...
- vue 实例生命周期
compile template into render function 编译模板渲染方法 compile el’s ouoterHtml as template 将el的outerHTML当做模板 ...
- vue入门:(底层渲染实现render函数、实例生命周期)
vue实例渲染的底层实现 vue实例生命周期 一.vue实例渲染的底层实现 1.1实例挂载 在vue中实例挂载有两种方法:第一种在实例化vue时以el属性实现,第二种是通过vue.$mount()方法 ...
- Vue:生命周期
一.什么是vue的生命周期 Vue中的生命周期是指组件从创建到销毁的一系列过程.看下面这张官方文档的图: 从图片中可以看出Vue的整个生命周期包括8个状态,按照先后顺序分别为: beforeCreat ...
- 前端(二十)—— vue介绍:引用vue、vue实例、实例生命周期钩子
vue 一.认识Vue 定义:一个构建数据驱动的 web 界面的渐进式框架 优点: 1.可以完全通过客户端浏览器渲染页面,服务器端只提供数据 2.方便构建单页面应用程序(SPA) 3.数据驱动 =&g ...
- 8.vue的生命周期
Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.卸载等一系列过程,我们称这是Vue的生命周期.通俗说就是Vue实例从创建到销毁的过程,就是生命周期 ...
随机推荐
- Oracle约束的使用
--5个约束,主键约束.外键约束.唯一约束.检查约束.非空约束. --添加主键约束 Alter table table_name Add constraints constraint_name Pri ...
- 1135 Is It A Red-Black Tree(30 分)
There is a kind of balanced binary search tree named red-black tree in the data structure. It has th ...
- MongoDB4.0.0的安装配置—windows
一.背景 由于要学习MongoDB,所以就下载了最新的MongoDB 的Community Server版的4.0.0版本.可能是新的版本的缘故,在安装配置上与MongoDB3有许多不同,而且在3中的 ...
- python爬虫知识点总结(七)PyQuery详解
官方学习文档:http://pyquery.readthedocs.io/en/latest/api.html 一.什么是PyQuery? 答:强大有灵活的网页解析库,模仿jQuery实现.如果你觉得 ...
- Godot-3D教程-01.介绍3D
创建一个3D游戏将是个挑战,额外增加的Z坐标将使许多用于2D游戏的通用技术不再有用.为了帮助变换(transition),值得一提的是Godot将使用十分相似的API用于2D和3D. 目前许多节点是公 ...
- NOI.AC 32 Sort——分治
题目:http://noi.ac/problem/32 从全是0和1的情况入手,可以像线段树一样分治下去,回到本层的时候就是左半部的右边是1,右半部的左边是0,把这两部分换一下就行.代价和时间一样是n ...
- 2010浙大:zoj问题
题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下:1. zoj能AC:2. 若字符串形式为xzojx,则也能AC,其中x可以是N个'o' 或者 ...
- java-并发-进程和线程
浏览以下内容前,请点击并阅读 声明 软件的并发是指同时做多件事情,java平台一开始就支持并发编程,java编程语言以及类库含有对并发最基本的支持,从5.0版本开始,java平台开始包含一些高并发的A ...
- Python 模拟post请求
# coding:utf-8import requestsurl = "https://passport.cnblogs.com/user/signin" # 接口地址 # 消息头 ...
- 获取CPU ID ,disk ID, MAC ID (windows ARM linux Mac)
windows 命令行获取CPU ID,可以用ShellExecute wmic cpu get processorid ProcessorId BFEBFBFF000506E3 开源库: 查询CPU ...