Vue学习笔记之应用创建和基础知识
1、安装方式
CDN方式安装:
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
2、创建应用
使用Vue内置对象创建一个应用,基本代码结构如下:
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app"></div>
<script>
const { createApp } = Vue;
createApp({
data(){
return {
}
},
methods: {
},
mounted() {
},
computed: {
}
}).mount('#app');
</script>
id为app的div元素,代表vue应用绑定的dom元素,vue对内部数据的操作都会直接影响dom的数据更新;
data:响应式数据均定义在data内部
methods:自定义函数定义在区域
mounted:DOM元素挂在应用后,可再此执行初始化操作,使用this对象操作data数据
computed:计算属性定义在此区域,一般只涉及读操作,基于响应式数据组合为一个新属性,提供给DOM元素渲染,也支持修改计算属性,但不建议这么做。
3、插值语法
使用两个{{}}大括号表示,如在data部分定义返回属性count,
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app">
{{count}}
</div>
<script>
const { createApp } = Vue;
createApp(
{
data() {
return {
count: 1
}
},
}).mount('#app');
</script>
3、v-if,v-else判断指令
cansee为真时展示v-if的p元素,否则展示v-else的p元素
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app">
<p v-if="cansee">can see me!</p>
<p v-else>you can't see me!</p>
</div>
<script>
const { createApp } = Vue;
createApp(
{
data() {
return {
cansee: true,
}
}
}).mount('#app');
</script>
4、v-on事件指令
v-on:click代表绑定onclick事件,在methods区域定义了事件处理函数,将响应式数据count执行加1操作,如下所示:
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app">
{{count}}
<button v-on:click="increment">点击我</button>
</div>
<script>
const { createApp } = Vue;
createApp(
{
data() {
return {
count: null,
}
},
mounted() {
this.count = 1;
},
methods: {
increment() {
this.count++;
}
}
}).mount('#app');
</script>
5、嵌套对象的使用
可以使用嵌套对象语法给DOM元素绑定数据,如下所示:
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app">
<p>{{obj.nested.count}}</p>
<button v-on:click="increment">点击我</button>
</div>
<script>
const { createApp } = Vue;
createApp(
{
data() {
return {
obj: {
nested: { count: 0 }
}
}
},
mounted() {
},
methods: {
increment() {
this.obj.nested.count++;
}
}
}).mount('#app');
</script>
6、计算属性的使用
计算属性基于响应式数据组合新的数据,计算属性的 getter 应只做计算而没有任何其他的副作用,不要改变其他状态、在 getter 中做异步请求或者更改 DOM。另外,避免直接修改计算属性的值。
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app">
<p>Has published books:</p>
<span>{{isPublishedBooks}}</span><br/>
<button v-on:click="removeAll">删除所有</button>
<p>总指导是:{{fullName}}</p>
<button v-on:click="modifyZonzhidao">改名</button>
</div>
<script>
const { createApp } = Vue;
createApp({
data(){
return {
author: {
name: 'John Doe',
books: [
'Java guide 3',
'C# 高级编程',
'数据库基础'
],
firstName: 'Pan',
lastName: 'three big stones'
}
}
},
methods: {
removeAll() {
this.author.books = [];
},
modifyZonzhidao() {
this.fullName = '黄 飞鸿';
}
},
computed: {
isPublishedBooks() {
return this.author.books.length > 0 ? 'Yes' : 'No';
},
fullName: {
get() {
return this.author.firstName + ' ' + this.author.lastName;
},
set(newValue) {
//注意:这里使用解构赋值语法
[this.author.firstName, this.author.lastName] = newValue.split(' ');
}
}
}
}).mount('#app');
</script>
6、类的绑定
使用vue将class绑定到DOM元素有以下5种方式:
1)单属性语法赋值class方式,:class="{active:isActive,'text-danger':hasError}",isActive为真将绑定active类,hasError为真将绑定text-danger类,同时为真将绑定两者
2)使用对象直接赋值class方式,:class="classObj",直接绑定classObj中所有为真的类
3)使用计算表达式方式赋值,:class="classObj2",classObj2是一个计算表达式,如下代码所示,也是绑定计算表达式返回对象中所有为真的class
4)使用数组方式赋值class,:class="[activeClass,errorClass]",直接绑定activeClass和errorClass所对应的class
5)基于条件判断+数组的混合方式赋值class,:class="[{active:isActive},errorClass]",如isActive为真,将绑定active和errorClass属性对应的class,否则只会绑定errorClass属性对应的class
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<style>
.active{
background-color:lightcoral;
border:1px dotted black;
width:200px;
height:200px;
opacity:0.5;
}
.text-danger{
opacity:1;
background-color:red;
}
</style>
<div id="app">
<div class="static" :class="{active:isActive,'text-danger':hasError}">单属性赋值class方式</div>
<div :class="classObj">多属性对象赋值class方式</div>
<div :class="classObj2">计算表达式赋值class方式</div>
<div :class="[activeClass,errorClass]">class赋值数组对象方式</div>
<div :class="[{active:isActive},errorClass]">class赋值数组对象带条件判断方式</div>
</div>
<script>
const { createApp } = Vue;
createApp({
data(){
return {
isActive: true,
hasError: false,
classObj: {
active: true,
'text-danger': true
},
activeClass: 'active',
errorClass: 'text-danger',
}
},
methods: {
},
computed: {
classObj2() {
return {
active: this.isActive && !this.hasError,
'text-danger': !this.hasError
}
}
}
}).mount('#app');
</script>
6、内联样式的绑定
使用vue将内联元素绑定到DOM元素有以下3种方式:
1)单属性语法赋值style方式,:style="{color:activeColor,fontSize:fontSize+'px'}",绑定颜色和字体大小两个内联元素
2)使用对象直接赋值style方式,:class="styleObj",直接绑定styleObj中所有的内联元素
3)使用数组方式赋值style方式,:class="[styleObj,styleObj2]",将合并数组中所有对象下的内联元素
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app">
<div :style="{color:activeColor,fontSize:fontSize+'px'}">内联样式直接赋值方式</div>
<div :style="styleObj">内联样式使用对象赋值方式</div>
<div :style="[styleObj,styleObj2]">内联样式使用数组对象赋值方式</div>
</div>
<script>
const { createApp } = Vue;
createApp({
data(){
return {
activeColor: 'red',
fontSize: 30,
styleObj: {
color: 'green',
fontSize: '28px'
},
styleObj2: {
fontWeight: 'bold',
fontFamily: 'cursive'
}
}
},
methods: {
},
computed: {
}
}).mount('#app');
</script>