vue-06-vue路由

vue-router

引包vue-router.js

1
2
<script src="./lib/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

声明一个路由实例

1
2
3
4
5
6
7
8
<script>
var router = new VueRouter({
routes: [
{path: '/', redirect: '/login'},
{path: 'url', component: 注意这里是组件的原型而不是组件的引用标签}
]
})
</script>

在vm中注册

1
2
3
4
5
6
7
8
9
10
<script>
var vm = new Vue({
el:
data:
methods:
filters:
direvtives:
router: router //
})
</script>

在页面中使用

1
2
3
4
5
6
<div id="app">
<router-link to="/login" tag="span">登录</router-link>
<!-- 发送路由的标签 -->
<router-view></router-view>
<!-- 承载组件的容器router-view -->
</div>

给linkActiveClass自定义样式实现高亮显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<style>
.myStyle {

}
</style>
<script>
var router = new VueRouter({
routes: [
{path: '/', redirect: '/login'},
{path: 'url', component: 注意这里是组件的原型而不是组件的引用标签}
],
linkActiveClass: 'myStyle'
})
</script>

query查询的方式传值,在对应的组件中就可以拿到值this.$route.query.id

1
2
3
4
5
6
<div id="app">
<router-link to="/login?id=123" tag="span">登录</router-link>
<!-- 发送路由的标签 -->
<router-view></router-view>
<!-- 承载组件的容器router-view -->
</div>

params方式传值

1
2
3
4
5
6
7
8
9
10
<script>
var router = new VueRouter({
routes: [
{path: '/', redirect: '/login'},
{path: 'url', component: 注意这里是组件的原型而不是组件的引用标签},
{path: '/login/:id/:name', component: login} // : 是占位符的意思,传值的时候表示 id:'123', name: 'zhangsan'
],
linkActiveClass: 'myStyle'
})
</script>

传值:(通过this.$route.params.id this.$route.params.name拿到)

1
2
3
4
5
6
<div id="app">
<router-link to="/login/123/zhangsan" tag="span">登录</router-link>
<!-- 发送路由的标签 -->
<router-view></router-view>
<!-- 承载组件的容器router-view -->
</div>

路由的嵌套(children)

使用命名视图实现经典布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<router-view></router-view>
<router-view name="left"></router-view>
<router-view name="main"></router-view>
<script>
var header = {
template: '<h3>header</h3>'
}
var left = {
template: '<h3>left</h3>'
}
var main = {
template: '<h3>main</h3>'
}

var router = new VueRouter({
routes: [
{path: '/', components: {
'default': header,
'left': left,
'main': main
}},
})
</script>

watch 用来监听data中值的改变(优势在于可以监听非DOM元素的改变)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<script>
var vm = new Vue({
el:
data: {
msg: 123
}
methods:
filters:
direvtives:
router:
watch: {
msg: function (newVal, oldVal) {
//一旦msg变化就会触发这个方法,两个形参(改变后的值, 改变之前的值)
}
}
})
</script>

比如: 监听路由改变

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
var vm = new Vue({
el:
data: {
msg: 123
}
methods:
filters:
direvtives:
router:
watch: {
'$route.path': function (newVal, oldVal) {
if (newVal === '/login') {
console.log('欢迎进入登录页面')
}
}
}
})
</script>

computed计算属性

  • computed里声明的是函数,但我们把它当作属性来用(v-model=””)
  • 声明的函数所用到的值一旦变化就会重新计算
  • 求值的结果会被缓存起来,方便下次使用,声明的函数所用到的值不变就不会重新计算
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<script>
var vm = new Vue({
el:
data: {
msg1: 123,
msg2: 456
}
methods:
filters:
direvtives:
router:
watch: {},
computed: {
'result': function () {
return this.msg1 + this.msg2
}
}
})
</script>

computed、methods、watch对比

  • computed 虽然是函数但被当作属性来使用,属性的结果会被缓存,主要用于对数据的处理后得到一个结果
  • methods 表示一个具体的操作,主要用来书写业务逻辑
  • watch 键是需要观察的东西,值是键改变之后的回调函数,用于监听特定的数据变化,仿佛是computed和methods的结合

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×

// tidio机器人助手