路由
vue-router 的基本使用
定义组件
var login = {
template: "<h1>登录组件</h1>"
};
var register = {
template: "<h1>注册组件</h1>"
};
定义 vue-router
var routerObj = new VueRouter({
// 配置路由规则
routes: [
{
path: "/login",
// component 的属性值必须是一个组件的模板对象,不能是组件的引用名称
// component: 'login' 就是错误的
component: login
},
{
path: "/register",
component: register
}
]
});
关联到 Vue 实例
new Vue({
el: "#app",
router: routerObj
});
实现
<div id="app">
<a href="#/login">登录</a>
<a href="#/register">注册</a>
<!-- 这是 vue-router 提供的元素-->
<router-view></router-view>
</div>
效果展示
点击登录组件效果:
![](https://img.haomeiwen.com/i5131627/e3df308344d9fd19.png)
点击注册组件效果:
![](https://img.haomeiwen.com/i5131627/fae4f00deaf4839e.png)
router-link 替换 a 标签
<a href="#/login">登录</a>
可以替换成 <router-link to="/login" tag="span">登录</router-link>
。router-link
默认渲染成 <a></a>
标签,可使用 tag="span"
渲染成 <span></span>
标签。
redirect 重定向
// 在 routes 中定义
{
path: '/',
redirect: "/login"
}
路由传参
在 console 中输入
vm.$route
可详细查看。
使用 query 方式获取参数
<router-link to="/login?id=10">登录</router-link>
var login = {
template: "<h1>登录组件 -- {{ $route.query.id }}</h1>",
// 生命周期函数
created() {
console.log(this.$route.query.id);
}
};
使用 params 方式获取参数
{
path: '/login/:id',
component: login
},
<router-link to="/login/10">登录</router-link>
var login = {
template: "<h1>登录组件 -- {{ $route.params.id }}</h1>",
// 生命周期函数
created() {
console.log(this.$route.params.id);
}
};
路由的嵌套
routes: [
{
path: "/account",
component: account,
children: [
{
// 没有斜线
path: "login",
component: login
}
]
}
];
<router-link to="/account/login">Account</router-link>
命名视图
可以用命名视图实现首页经典布局。
![](https://img.haomeiwen.com/i5131627/493a9f0e151fcbb6.png)
<div id="app">
<!--命名视图-->
<router-view></router-view>
<router-view name="left"></router-view>
<router-view name="main"></router-view>
</div>
var routerObj = new VueRouter({
// 配置路由规则
routes: [
{
path: "/",
components: {
default: header,
left: left,
main: main
}
}
]
});
watch 监听
监听路由示例:
var vm = new Vue({
el: "#app",
watch: {
"$route.path": function(newVal, oldVal) {
console.log(newVal + "------" + oldVal);
}
}
});
监听文本数据:
<input type="text" v-model="firstname" />
var vm = new Vue({
el: "#app",
data: {
firstname: ''
}
watch: {
"firstname": function(newVal, oldVal) {
console.log(newVal + "------" + oldVal);
}
}
});
上述代码也可以用 keyup
实现:
<input type="text" @keyup="getName" v-model="firstName" />
var vm = new Vue({
el: "#app",
data: {
firstName: ""
},
methods: {
getName() {
console.log(this.firstName);
}
}
});
computed 监听
<input type="text" v-model="firstName" />
<input type="text" v-model="lastName" />
<input type="text" v-model="fullName" />
var vm = new Vue({
el: "#app",
data: {
firstName: "",
lastName: ""
},
computed: {
// fullName 的值在引用时会根据 firstName 和 lastName 重新计算并更新
fullName: function() {
return this.firstName + "-" + this.lastName;
}
}
});
网友评论