# 基础
# 深入
# data
vue组件中data中定义的数组,对象,实际类型是Proxy,都使用了代理。
# 全局变量
const app = createApp(App)
app.config.globalProperties.$foo = 'bar';
1
2
2
或使用provide/inject
父组件中用provide选项提供数据,子组件中用inject选项使用该数据。
/*
Root
└─ TodoList
├─ TodoItem
└─ TodoListFooter
├─ ClearTodosButton
└─ TodoListStatistics
*/
const app = Vue.createApp({})
app.component('todo-list', {
data() {
return {
todos: ['Feed a cat', 'Buy tickets']
}
},
provide() {
return {
user: 'John Doe'
}
},
template: `
<div>
{{ todos.length }}
<!-- rest of the template -->
</div>
`
})
app.component('todo-list-statistics', {
inject: ['user'],
created() {
console.log(`Injected property: ${this.user}`) // > Injected property: John Doe
}
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# router-link
- 当router-link的目标路径可以和当前路径匹配(例如,当前/foo/bar,可以匹配/,/foo,/foo/bar三个目标路径)时,该router-link标签会自动添加类.router-link-active
- 当router-link的目标路径可以和当前路径完全匹配(一模一样)时,该router-link标签会自动添加类.router-link-exact-active
- 可以在router-link标签上加exact属性,这样只有在完全匹配时才会添加类.router-link-active。通常会用于to='/'的router-link
<router-link to="/foo/bar"></router-link>
普通的router-link写法<router-link :to="{name = 'Foo', params = {id : 'bar'}}"></router-link>
转到已命名的路由的router-link写法- 另一种动态链接写法
<router-link :to="`/foo/${id}`"></router-link>
1
# nested router-view
Home组件中有一个router-view,这个router-view对应的组件中还有一个router-view。则内层router-view可以声明如下。
{
path: '/home',
name: 'Home',
component: () => import('@/views/Home.vue'),
children: [
{
path: ':id', // 匹配/home/:id
name: 'Main',
component: () => import('@/views/Main.vue'),
props: true // 让Home组件中的router-link中的路径参数可以传入Main组件,用Main的props接收。
},
],
},
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# named router-view
普通的<router-view />
默认使用routes中的component指定的组件。如果一个页面要有多个router-view,每个router-view对应不同的组件,则需要为router-view指定name。
<router-view />
<router-view name='a' />
<router-view name='b' />
// 在routes中,要为每个router-view指定好组件。
{
path: 'xxx',
name: 'yyy',
component: {
default: ComponentDefault,
a: ComponentA,
b: ComponentB,
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# route路径参数(动态链接)
const router = new VueRouter({
routes: [
// dynamic segments start with a colon
{ path: '/user/:id', component: User, props: true }
]
})
1
2
3
4
5
6
2
3
4
5
6
path中的:id称为dynamic segment。如果path匹配到了,则可以通过$route.params.id访问匹配到的id值。
如果路由对象的props设为true,则可由component的props属性接收路径参数。
# 如何获取事件的event对象
@event="onEvent($event)
,$event
为原生DOM的事件对象。
← BOM&DOM&Event CSS 基础 →