# 问题自检
【选择题】1、选择实例化Vue中各个含义表述正确的选项
【选择题】2、下面关于模版语法表示正确的?
【选择题】3、选出vue实例中使用函数方式表达的属性,另外思考为什么要用函数呢?箭头函数行吗?
# 创建vue实例
传递给 createApp 的选项用于配置根组件。当我们挂载应用时,该组件被用作渲染的起点。
import { createApp } from 'vue'
//省略引入的组件路径
createApp(App) //APP是入口组件,所有的组件在该组件中设置
.component('SearchInput', SearchInputComponent) //全局组件
.directive('focus', FocusDirective) //全局指令
.use(router) //使用路由插件
.mount('#app')
1
2
3
4
5
6
7
2
3
4
5
6
7
# 模版语法
用法速览:
<template>
<!--文本插值,支持js单个表达式-->
<span>Message: {{ message.split('').reverse().join('')}}</span>
<span v-once>这个将不会改变: {{ msg }}</span><!--一次性地插值,后续不会更新-->
<span :html="rawHtml"></span><!--将rawHtml变量渲染为HTML-->
<div :id="dynamicId"></div><!--将dynamicId变量渲染为元素属性-->
<a @click="doSomething"> ... </a><!--监听事件-->
<!--动态参数:用方括号括起来,如attributeName可以为 blur||focus-->
<a v-on:[attributeName]="doSomething"> ... </a>
<!--修饰符:是以半角句号.指明的特殊后缀,用于指出一个指令应该以特殊方式绑定-->
<form v-on:submit.prevent="onSubmit">...</form>
</template>
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# data属性
组件的 data 选项是一个函数,这样每一个实例的data属性都是独立的,不会相互影响。
然后data对象,以 $data 的形式存储在组件实例中,为方便起见,该对象的任何顶级 property 也直接通过组件实例暴露出来:
入口js,可以调用组件的data数据
import { createApp } from 'vue'
import App from './App.vue'
const vm =createApp(App).mount('#app')
console.log(vm.$data.count); //获取顶级组件App中的data,无法获取App中再包裹的子组件的data
vm.count = 15;//改变组件中的data值
1
2
3
4
5
2
3
4
5
app.vue 入口组件中返回函数形式定义data数据:
<template>
<div>{{count}}</div>
</template>
<script>
export default {
name: 'App',
data(){
return {
count:4
}
}
}
</script>
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
注意
vue3兼容了vue2的写法,vue3对响应式的数据如:ref、reactive等方式是放在了setup函数中,而setup相当于生命周期中最早执行的部分。上面例子就是兼容了vue2的写法。vue3中新增的setup方法会在后面介绍。
# 完整示例
完整代码
<template>
<!--文本插值,支持js单个表达式-->
<span>Message: {{ message.split('').reverse().join('')}}</span>
<span v-once>这个将不会改变: {{ message }}</span><!--一次性地插值,后续不会更新-->
<button @click="changeMsg">点击改变message</button><!--监听事件-->
<span :html="rawHtml"></span><!--将rawHtml变量渲染为HTML-->
<div :id="dynamicId"></div><!--将dynamicId变量渲染为元素属性-->
<!--动态参数:用方括号括起来,如attributeName可以为 blur||focus-->
<input v-on:[attributeName]="changeInput" v-model="inputData"/>
<button @click="changeAttribute">点击改变input的绑定事件</button><!--监听事件-->
<!--修饰符:是以半角句号.指明的特殊后缀,用于指出一个指令应该以特殊方式绑定-->
<form v-on:submit.prevent="onSubmit">...</form>
</template>
<script>
export default {
name: 'App',
data(){
return {
message:'hello world',
rawHtml:'<p class="color:red">标签内容</p>',
dynamicId:'myid',
inputData:''
}
},
methods:{
changeMsg(){
this.message = 'change msg'
},
changeInput(){
console.log(this.inputData)
},
changeAttribute(){
this.attributeName == this.attributeName === 'blur'?'focus':'blur'
}
}
}
</script>
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
37
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
37
← 配置环境 方法&计算属性&侦听器 →