Vue.js基础语法学习(vue2)(一)
一、vue.js基础知识:
1.vue.js安装方式:
1.直接CDN引入:
<!--开发环境版本,包含了有帮助的命令行警告-->
<script src="https://cdn.jsdelivr.net/ npm/vue/ dist/vue.js"></script>
<!--生产环境版本,优化了尺寸和速度-->
<script src= "https: //cdn.jsdelivr.net/npm/vue"></script>
2.下载和引入:
开发环境https ://vuejs.org/is/vue.is
生产环境https ://vuejs.org/is/vue.min.is
3.NPM安装
2.vue.js的响应式:
<div id="app">{{massage}}</div>
<script>
// Es6里定义 let(变量) const(常量)
//创建一个vue的对象
const app = new Vue({
el:'#app',//用于挂载要管理的元素
data:{//定义数据
massage:'你好啊,李洋静!'
}
})
</script>
3.vue.js的列表展示:
<div id="app">
<ul>
<!--而且还是响应式的 -->
<li v-for="item in movies">{{item}}</li>
</ul>
</div>
<script src="../JS/vue.js"></script>
<script>
const app = new Vue({
el:'#app',//用于挂载要管理的元素
data:{//定义数据
movies:['one','two','three','four']
}
})
</script>
4.vue.js计数器:
<div id="app">
<h2>当前计数:{{conter}}</h2>
<!-- 一般不这么写 -->
<!-- <button @click="conter++">+</button>
<button v-on:click="conter--">-</button> -->
<!-- 这样写 -->
<button @click="add">+</button>
<button @click="sub">-</button>
</div>
<script src="../JS/vue.js"></script>
<script>
const app = new Vue({
el:'#app',
data:{
conter:0
},
methods:{
add:function(){
console.log('add被执行');
this.conter++;
},
sub:function(){
console.log('sub被执行');
this.conter--;
}
}
})
</script>
5.vue.js的MVVM:
(Model ViewModel View)
计数器的mvvm
6.创建vue实例传入的options:
https://cn.vuejs.org/v2/api/#%E9%80%89%E9%A1%B9-%E6%95%B0%E6%8D%AE
目前掌握这些:
-
el:
类型: string | HTMLElement
作用:决定之后Vue实例会管理哪一个DOM.
-
data:
类型 : Object| Function
作用: Vue实例对应的数据对象。
-
methods:
类型: { [key: string]: Function }
作用:定义属于Vue的一些方法,可以在其他地方调用,也可以在指令中使用。
方法和函数的区别:定义在类里面的是方法、定义在外面的是函数。
7.vue的template:
<div id="app">
massage
</div>
<script src="../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage:''
}
})
</script>
二、vue模板语法:
1.插值操作——mustache(双大括号)语法:
<div id="app">
<h2>你好啊!,{{massage}}</h2>
<h2>{{fristName+lastName}}</h2>
<h2>{{fristName+''+lastName}}</h2>
<h2>{{fristName}} {{lastName}}</h2>
<h2>{{conter*2}}</h2>
<!-- mustache语法中不仅可以直接写变量,还可以写简单的表达式 -->
</div>
<script src="../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage:'李洋静',
fristName:'linshan',
lastName:'he',
conter:100
}
})
</script>
①.v-once:
<div id="app">
<h2>{{massage}}</h2>
<h2 v-once>{{massage}}</h2>
</div>
<script src="../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage:'liyangjing'
}
})
</script>
②.v-html:
<div id="app">
<h2>{{url}}</h2>
<h2 v-html="url"></h2>
</div>
<script src="../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage:'liyangjing',
url:'<a href = "http://www.baidu.com">百度一下</a>'
}
})
</script>
③.v-text:
<div id="app">
<h2>{{massage}},是猪</h2>
<h2 v-text="massage">,是猪</h2>
</div>
<script src="../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage:'liyangjing'
}
})
</script>
</body>
用了v-text之后会覆盖标签里的文字,使标签里的文字不会显示。
④v-pre:
用于不让大括号里的内容被解析的情况。
<div id="app">
<h2>{{massage}}</h2>
<h2 v-pre>{{massage}}</h2>
</div>
<script src="../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage:'你好啊'
}
})
</script>
⑤v-cloak:
<style>
[v-cloak]{
display: none;
}
</style>
<div id="app" v-cloak>
{{massage}}
</div>
<script src="../JS/vue.js"></script>
<script>
// 在vue解析之前,div中有一个属性v-cloak
// 在vue解析之后,div中没有一个属性v-cloak
// 定时器
setTimeout(function(){
const app = new Vue({
el: '#app',
data: {
massage:'你好啊'
}
})
},1000)
</script>
2.动态绑定属性:
①v-bind的基本使用:
<div id="app">
<!-- 这里不能写成src="{{imgURL}}" 这里不能使用mustache语法 -->
<!-- 添加了v-bind之后 v-bind后面的属性就是可以动态变化的,里面的内容就是变量-->
<img v-bind:src="imgURL" alt="">
<a v-bind:href="aHref"></a>
</div>
<script src="../../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage:'你好啊',
imgURL:'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fci.xiaohongshu.com%2Fcccdc80d-3051-7b5b-b3f3-657af1e45242%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fci.xiaohongshu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1648715374&t=2920d025406a977f19bb5e8cd853a92a',
aHref:'www.baidu.com'
}
})
</script>
语法糖的写法:
<!-- 语法糖的写法 -->
<img :src="imgURL" alt="">
<a :href="aHref"></a>
②*v-bind动态绑定class(对象语法):
<div id="app">
<h2 class="active"></h2>
<h2 v-bind:class="active"></h2>
<h2 :class="active"></h2>
<!-- 常用使用方法 -->
<h2 v-bind:class="{key1:value1,key2:valuel2}"></h2>
<!-- <h2 v-bind:class="{类1:boolean,类:boolean}"></h2>-->
<h2 v-bind:class="{active:isActive,line:isLine}"></h2>
</div>
<script src="../../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage:'你好啊',
active:'active',
isActive:true,
isLine:true
}
})
</script>
③v-for和v-bind的结合:
方法一:
<style>
.active{
color: red;
}
</style>
<body>
<div id="app">
<ul>
<!-- 当点击的时候令activeIndex等于当前下标,然后当activeIndex等于当前下标时,动态绑定class为active -->
<li v-for="(m,index) in movies" @click="activeIndex=index" :class="{'active':activeIndex==index}">{{index}}-{{m}}</li>
</ul>
</div>
<script src="../../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
movies:['one','two','three','four'],
activeIndex:0
}
})
</script>
</body>
方法二:
④*v-bind动态绑定style(对象语法):
<div id="app">
<!-- <h2 :style="{{key(属性名):value(属性值)}}">{{massage}}</h2> -->
<h2 :style="{fontSize: '50px'}">{{massage}}</h2>
<!-- 注意这里要加单引号,不然会把50px当成变量名-->
<h2 :style="{fontSize: finalSize+'px',color: finalColor}">{{massage}}</h2>
<h2 :style="getStyles()">{{massage}}</h2>
</div>
<script src="../../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage:'你好啊',
finalSize: 100,
finalColor:'red'
},
methods: {
getStyles: function(){
return {fontSize: this.finalSize+'px',color: this.finalColor}
}
}
})
</script>
⑤v-bind动态绑定style(数组语法):
<div id="app">
<h2 :style="[baseStyle,baseStyle1"></h2>
</div>
<script src="../../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage:'你好啊',
baseStyle:{backgroundColor: 'red'},
baseStyle1:{fontSize: '100px'}
}
})
</script>
3.计算属性的基本使用:
①什么是计算属性:
computed
计算属性与方法的语法区别:
计算属性在多次调用的时候只会执行一次,methods调用多少次执行多少次
<div id="app">
<h2>{{firstName}} {{lastName}}</h2>
<h2>{{getFullName()}}</h2>
<!-- 这里的fullName相当于一个属性 所以不用加() -->
<h2>{{fullName}}</h2>
</div>
<script src="../../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage: '你好啊',
firstName: 'linshan',
lastName: 'he'
},
// computed 计算属性
computed: {
fullName: function(){
return this.firstName+ ' ' + this.lastName
}
},
methods: {
getFullName(){
return this.firstName+ ' ' + this.lastName
}
}
})
</script>
②计算属性的复杂操作:
<div id="app">
<h2>总价格: {{totalPrice}}</h2>
</div>
<script src="../../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
// 数组里面放的对象
books:[
{id:110,name:'unix编程',price:119},
{id:111,name:'深入理解java虚拟机',price:105},
{id:112,name:'深入理解计算机原理',price:95},
{id:113,name:'现代操作系统',price:87},
]
},
computed: {
totalPrice: function(){
let result = 0;
for (let i in this.books){
result += this.books[i].price
}
return result
}
}
})
③计算属性的getter和setter:
<div id="app">
<h2>{{fullName}}</h2>
</div>
<script src="../../JS/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
massage: '你好啊',
firstName: 'linshan',
lastName: 'he'
},
// computed 计算属性
computed: {
// 这种是简写
// fullName: function(){
// return this.firstName+ ' ' + this.lastName
// }
// 计算属性一般没有set方法,只读属性
// 但是也可以给他加一个set方法
fullName: {
set: function(newValue){
console.log(newValue)
const names = newValue.split(' ');
this.firstName = names[0];
this.lastName = names[1];
},
get: function(){
return this.firstName+ ' ' + this.lastName
}
}
}
})
</script>
④计算属性和methods的对比:
把数据做一种变换、运算显示到界面上通常用计算属性;