前言
Vue是一个用于构建用户界面的渐进式框架。与其他大型框架不同的是,Vue被设定为能够由底往上,逐层应用。其不仅语法简单,而且易于与其他第三方项目集成。在单页应用程序上仍能提供强大的支持

1 插值操作
1.1 Mustache语法
也就是双大括号 {{ }}
<div id="app">
<h2>{{ message }} : {{ info }}</h2>
<h2>{{ message + " : " + info }}</h2>
<h2>{{ counter * 2 }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "你好",
info: "有勇气的牛排",
counter:100
}
})
</script>
1.2 v-once
<div id="app">
<h2>{{ message }}</h2>
<h2 v-once>{{ message }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "你好,有勇气的牛排"
}
})
</script>
1.3 v-html
某些情况下,我们从服务器请求到的数据本身就是一个HTML代码
如果我们希望解析出HTML展示
-
可以使用v-html指令
-
该指令直面往往会跟上一个string类型
-
会将string的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: {
message: "你好,有勇气的牛排",
url:'<a href="https://www.couragesteak.com/">开发者</a>'
}
})
</script>

1.3 v-text
不推荐,灵活度不够
<div id="app">
<h2 v-text="message"></h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "你好,有勇气的牛排",
}
})
</script>
1.4 v-pre
v-pre用于跳过这个元素和它子元素的编译过程,用于显示原本的Mustche语法
比如下面代码
-
第一个h2元素中的内容会被编译解析出来对应的内容
-
第二个h2元素中会直接显示{{message}}
<div id="app">
<h2>{{ message }}</h2>
<h2 v-pre>{{ message }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "你好,有勇气的牛排"
}
})
</script>

1.5 v-cloak
在某些情况下,我们浏览器可能会直接显示出未变异的Mustche标签
<div id="app" v-cloak>
<h2 v-text="message">{{ message }}</h2>
</div>
2 绑定属性
2.1 v-bind
场景:某些属性需要动态绑定
-
比如动态绑定a元素的href属性
-
比如动态绑定img元素的src属性
v-bind指令:
<div id="app">
<!-- 错误做法: 不能在属性中使用mustache语法-->
<!-- <img src="{{ imgURL }}" alt="">-->
<!-- 正确做法:使用v-bind指令 -->
<img v-bind:src="imgURL" alt="">
<a v-bind:href="aHref">有勇气的牛排</a>
<!-- 语法糖的写法 -->
<img :src="imgURL" alt="">
<a :href="aHref">有勇气的牛排</a>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
imgURL: 'https://static.couragesteak.com/article/4b9785ac56dea2567e62ba08d1ca1767.png',
aHref: 'https://www.920vip.net/'
}
})
</script>
2.2 v-bind绑定class
2.2.1 绑定方式:对象语法
<h2 :class="{'active':isActive}">Hello World</a>
<h2 :class="{'active':isActive,'line':isLine}">Hello World</a>
<h2 class="title" :class="{'active':isActive,'line':isLine}">Hello World</a>
<h2 class="title" :class="classes">Hello World</h2>
2.2.2 绑定方式:数组语法
<div id="app">
<h2 class="title" :class="[active,line]">{{ message }}</h2>
<h2 class="title" :class="getClasses()">{{ message }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "你好,有勇气的牛排",
active: '666',
line: '777'
},
methods: {
getClasses: function () {
return [this.active, this.line]
}
}
})
</script>
2.3 点击列表中哪一项,那么该项的文字变为红色
<style>
.active {
color: red;
}
</style>
<div id="app">
<ul>
<li v-for="(m, index) in movies"
:class="{active:index === currentIndex}"
@click="liClick(index)"
>
{{ index }}{{ ' - ' + m }}
</li>
</ul>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
movies: ['灰太狼', '有勇气的牛排', '导演'],
currentIndex: 0
},
methods: {
liClick: function (index) {
this.currentIndex = index
}
}
})
</script>
2.4 v-bind绑定style
-
我们可以使用驼峰式(cameCase)fontSize
-
或短横线分隔(kebab-case,记得用单引号括起来)'font-size'
- 对象语法
<div id="app">
<h2 :style="{fontSize: '50px'}">{{ message }}</h2>
<h2 :style="{fontSize: finalSize + 'px',color:finalColor}">{{ message }}</h2>
<h2 :style="getStyles()">{{ message }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "你好,有勇气的牛排",
finalSize: 60,
finalColor: 'red'
},
methods:{
getStyles:function () {
return {fontSize: this.finalSize + 'px',color:this.finalColor}
}
}
})
</script>
- 数组语法
<div id="app">
<h2 :style="[baseStyle, baseStyle1]">{{ message }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "你好,有勇气的牛排",
baseStyle: {backgroundColor: 'red'},
baseStyle1: {fontSize: '100px'}
}
})
</script>
3 计算属性
- 某些情况下,我们可能需要对数据进行一些转换后再显示,或者需要将多个数据结合起来进行显示
- 我们可以将上面的代码转换成计算属性
3.1 基本操作
<div id="app">
<h2>{{ name + ' : ' + nameValue }}</h2>
<h2>{{ name }} : {{ nameValue }}</h2>
<h2>{{ getFullName() }}</h2>
<h2>{{ fullName }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
name: "昵称",
nameValue: "灰太狼"
},
computed: {
fullName() {
return this.name + ' : ' + this.nameValue
}
},
methods: {
getFullName() {
return this.name + ' : ' + this.nameValue
}
}
})
</script>
3.2 复杂操作
<div id="app">
<h2>总价格: {{ totalProce }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
books: [
{id: 110, name: "C语言", price: 50},
{id: 111, name: "操作系统", price: 60},
{id: 112, name: "统计学习方法", price: 70},
{id: 113, name: "鬼谷子", price: 30},
{id: 114, name: "即兴演讲", price: 35}
]
},
computed: {
totalProce: function () {
let result = 0
for (let i = 0; i < this.books.length; i++) {
result += this.books[i].price
}
return result
}
}
})
</script>
3.3 计算属性的setter和getter
<div id="app">
<h2>{{ fullName }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
name: '昵称',
nameValue: '有勇气的牛排'
},
computed: {
fullName: {
set: function (newValue) {
const names = newValue.split('|');
this.name = names[0];
this.nameValue = names[1];
},
get: function () {
return this.name + ' : ' + this.nameValue
}
},
}
})
</script>
3.4 计算属性和methods的对比
<div id="app">
<h2>{{ name }} {{ nameValue }}</h2>
<h2>{{ getFullName() }}</h2>
<h2>{{ fullName }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
name: '昵称',
nameValue: '有勇气的牛排'
},
computed: {
fullName: function () {
return this.name + ' : ' + this.nameValue
}
},
methods: {
getFullName: function () {
return this.name + ' : ' + this.nameValue
}
}
})
</script>
3.5 计算属性的缓存
计算属性会进行缓存,如果多次使用时,计算属性只会调用一次
4 事件监听
4.1 v-on基本使用
<div id="app">
<h2>{{ counter }}</h2>
<button @click="increment">+</button>
<button @click="decrement">-</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
counter: 0
},
methods: {
increment() {
this.counter++
},
decrement() {
this.counter--
}
}
})
</script>
4.2 v-on参数
<div id="app">
<button @click="btn1Click()">按钮1</button>
<button @click="btn1Click">按钮1</button>
<br>
<button @click="btn2Click(123)">按钮2</button>
<button @click="btn2Click()">按钮2</button>
<button @click="btn2Click">按钮2</button>
<br>
<button @click="btn3Click(123,$event)">按钮3</button>
<button>按钮4</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "你好,有勇气的牛排"
},
methods: {
btn1Click() {
console.log('btn1Click');
},
btn2Click(event) {
console.log("按钮2:" + event);
console.log(event);
},
btn3Click(abc, event) {
console.log("按钮3");
console.log(abc, event);
}
}
})
</script>
4.3 v-on修饰符
Vue提供了修饰符来帮助我们方柏霓处理一些事件
-
.stop
:调用event.stopPropagation()
-
prevent
:调用event.preventDefault()
-
.{keyCode | keyAlias}
:只当事件是从特定键触发时才触发回调
-
.native
:监听组件根元素的原生事件
-
.once
:只触发一次回调
<div id="app">
<div @click="divClick">
6666666
<button @click.stop="btnClick">按钮</button>
</div>
<form action="test">
<input type="submit" value="提交" @click.prevent="submitClick">
</form>
<input type="text" @keyup.enter="keyup">
<button @click.once="btn2Click">按钮2</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "你好,有勇气的牛排"
},
methods: {
btnClick() {
console.log("btnClick")
},
divClick() {
console.log("divClick")
},
submitClick() {
console.log('submitClick')
},
keyup() {
console.log('keyup')
},
btn2Click() {
console.log('btn2Click')
}
}
})
</script>
5 条件判断
5.1 v-if
<div id="app">
<div v-if="isShow">
<div>666</div>
</div>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
isShow: true
}
})
</script>
5.2 v-if v-else
<div id="app">
<div v-if="isShow">
<div>666</div>
</div>
<div v-else>
<div>isShow为false时, 显示我</div>
</div>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
isShow: true
}
})
</script>
5.3 v-if v-else-if v-else
<div id="app">
<h2 v-if="score>=90">优秀</h2>
<h2 v-else-if="score>=80">良好</h2>
<h2 v-else-if="score>=60">及格</h2>
<h2 v-else>不及格</h2>
<h1>{{ result }}</h1>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
score: 99,
},
computed: {
result() {
let showMessage = ''
if (this.score >= 90) {
showMessage = '优秀'
} else if (this.score >= 80) {
showMessage = '良好'
} else if (this.score >= 60) {
showMessage = '及格'
} else {
showMessage = '不及格'
}
return showMessage
}
}
})
</script>
5.4 用户登录切换的案例(小问题)
<div id="app">
<span v-if="isUserLogin">
<label for="username">用户账号</label><input type="text" id="username" placeholder="用户账号" key="username">
</span>
<span v-else>
<label for="email">用户邮箱</label><input type="text" id="email" placeholder="用户邮箱" key="email">
</span>
<button @click="isUserLogin = !isUserLogin">切换类型</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
isUserLogin: true
}
})
</script>
5.5 v-show
v-if和v-show对比
开发中国如何选择
<div id="app">
<h2 v-if="isShow">{{ message }}</h2>
<h2 v-show="isShow">{{ message }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "你好,有勇气的牛排",
isShow: true
}
})
</script>
6 循环遍历
6.1 v-for遍历数组
语法格式案例:
# 不需要索引
v-for="movie in movies"
# 需要索引
v-for=(item,index) in items
<div id="app">
<ul>
<li v-for="item in names">{{ item }}</li>
</ul>
<ul>
<li v-for="(item, index) in names">
{{ index + 1 }} - {{ item }}
</li>
</ul>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
names: ['灰太狼', '有勇气的牛排', '导演']
}
})
</script>
6.2 v-for遍历对象
<div id="app">
<ul>
<li v-for="item in info">{{ item }}</li>
</ul>
<ul>
<li v-for="(value, key) in info">{{ key }} : {{ value }}</li>
</ul>
<ul>
<li v-for="(value, key, index) in info">{{ index + 1 }}-{{ key }} : {{ value }}</li>
</ul>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
info: {
name: '灰太狼',
age: 18,
height: 1.88
}
}
})
</script>
6.3 使用过程添加key
<div id="app">
<ul>
<li v-for="item in letters" :key="item">{{ item }}</li>
</ul>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['A', 'B', 'C', 'D', 'E']
}
})
</script>
6.4 数组方法
<div id="app">
<ul>
<li v-for="item in letters" :key="item">{{ item }}</li>
</ul>
<button @click="btnClick">按钮</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
letters: ['A', 'B', 'C', 'D', 'E']
},
methods: {
btnClick() {
this.letters.reverse();
Vue.set(this.letters, 0, '666');
}
}
})
</script>
7 阶段案例
购物车案例:
https://gitee.com/net920vip/vue-framework/tree/master/LearnVuejs01
https://github.com/net920vip/vue-framework/tree/master/LearnVuejs01
8 v-model
- Vue中使用v-model指令来实现单元数和数据的双向绑定
<input type="text" v-model="message">
等同于
<input type="text" :value="message" @input="message = $event.target.value">
8.1 v-model结合checkbox类型
<div id="app">
<label for="">
<input type="checkbox" value="轻音乐" v-model="hobbies">轻音乐
<input type="checkbox" value="国学" v-model="hobbies">国学
<input type="checkbox" value="思考" v-model="hobbies">思考
</label>
<h2>您的爱好是:{{ hobbies }}</h2>
<label v-for="item in originHobbies">
<input type="checkbox" :value="item" :id="item" v-model="hobbies">{{ item }}
</label>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
isAgree: false,
hobbies: [],
originHobbies: ['国学', '轻音乐', '绘画', '摄影', 'dj', '吉他']
}
})
</script>
8.2 v-model结合select类型
<div id="app">
<select name="" id="" v-model="hobby">
<option value="国学">国学</option>
<option value="轻音乐">轻音乐</option>
<option value="绘画">绘画</option>
</select>
<h2>您的选择是:{{ hobby }}</h2>
<select name="" id="" v-model="hobbies" multiple>
<option value="国学">国学</option>
<option value="轻音乐">轻音乐</option>
<option value="绘画">绘画</option>
</select>
<h2>您的选择是:{{ hobbies }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
hobby: "绘画",
hobbies:[]
}
})
</script>
8.3 v-model修饰符
<div id="app">
<input type="text" v-model.lazy="message">
<h2>{{ message }}</h2>
<input type="number" v-model.number="age">
<h2>{{ age }}---{{ typeof age }}</h2>
<input type="text" v-model.trim="name">
<h2>您输入的名字:{{ name }}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
message: "你好,有勇气的牛排",
age: 0,
name: ''
}
})
</script>
作者:有勇气的牛排(同官网、公众号)
<h2><a id="_0"></a>前言</h2>
<p>Vue是一个用于构建用户界面的渐进式框架。与其他大型框架不同的是,Vue被设定为能够由底往上,逐层应用。其不仅语法简单,而且易于与其他第三方项目集成。在单页应用程序上仍能提供强大的支持</p>
<p><img src="https://static.couragesteak.com/article/emoticons/%E5%B8%85%E5%93%A5%E7%9C%8B%E8%BF%87%E6%9D%A5.gif" alt="" /></p>
<h2><a id="1__6"></a>1 插值操作</h2>
<h3><a id="11_Mustache_8"></a>1.1 Mustache语法</h3>
<p>也就是双大括号 {{ }}</p>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- mustche语法中,不仅可以直接写变量,也可以写简单的表达式 --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ message }} : {{ info }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ message + " : " + info }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ counter * 2 }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-comment">// 编程范式:声明式编程</span>
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>, <span class="hljs-comment">// 用于关在要管理的元素</span>
<span class="hljs-attr">data</span>: { <span class="hljs-comment">// 定义数据</span>
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好"</span>,
<span class="hljs-attr">info</span>: <span class="hljs-string">"有勇气的牛排"</span>,
<span class="hljs-attr">counter</span>:<span class="hljs-number">100</span>
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="12_vonce_33"></a>1.2 v-once</h3>
<ul>
<li>
<p>该指令后面不需要跟任何表达式(比如之前的v-for后面是跟表达式的)</p>
</li>
<li>
<p>该指令表示元素和组件(组件后面才会学习)只会渲染一次,不会随着数据的改变而改变</p>
</li>
</ul>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">v-once</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-comment">// 编程范式:声明式编程</span>
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>, <span class="hljs-comment">// 用于关在要管理的元素</span>
<span class="hljs-attr">data</span>: { <span class="hljs-comment">// 定义数据</span>
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好,有勇气的牛排"</span>
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="13_vhtml_56"></a>1.3 v-html</h3>
<p>某些情况下,我们从服务器请求到的数据本身就是一个HTML代码</p>
<ul>
<li>
<p>如果我们直接通过{{ }} 来输出,会将HTML代码也一起输出</p>
</li>
<li>
<p>但是我们可能希望的是按照HTML格式进行解析,并显示对应的内容</p>
</li>
</ul>
<p>如果我们希望解析出HTML展示</p>
<ul>
<li>
<p>可以使用v-html指令</p>
</li>
<li>
<p>该指令直面往往会跟上一个string类型</p>
</li>
<li>
<p>会将string的html解析出来并进行渲染</p>
</li>
</ul>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ url }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">v-html</span>=<span class="hljs-string">"url"</span>></span><span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-comment">// 编程范式:声明式编程</span>
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>, <span class="hljs-comment">// 用于关在要管理的元素</span>
<span class="hljs-attr">data</span>: { <span class="hljs-comment">// 定义数据</span>
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好,有勇气的牛排"</span>,
<span class="hljs-attr">url</span>:<span class="hljs-string">'<a href="https://www.couragesteak.com/">开发者</a>'</span>
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/8904f044934e57e703cf1f735565a6bf.png" alt="image.png" /></p>
<h3><a id="13_vtext_93"></a>1.3 v-text</h3>
<p>不推荐,灵活度不够</p>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">v-text</span>=<span class="hljs-string">"message"</span>></span><span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-comment">// 编程范式:声明式编程</span>
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>, <span class="hljs-comment">// 用于关在要管理的元素</span>
<span class="hljs-attr">data</span>: { <span class="hljs-comment">// 定义数据</span>
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好,有勇气的牛排"</span>,
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="14_vpre_112"></a>1.4 v-pre</h3>
<p>v-pre用于跳过这个元素和它子元素的编译过程,用于显示原本的Mustche语法</p>
<p>比如下面代码</p>
<ul>
<li>
<p>第一个h2元素中的内容会被编译解析出来对应的内容</p>
</li>
<li>
<p>第二个h2元素中会直接显示{{message}}</p>
</li>
</ul>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">v-pre</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好,有勇气的牛排"</span>
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<p><img src="https://static.couragesteak.com/article/35c8e45ed7d774541925f8d47a9045aa.png" alt="https://static.couragesteak.com/article/35c8e45ed7d774541925f8d47a9045aa.png" /></p>
<h3><a id="15_vcloak_140"></a>1.5 v-cloak</h3>
<p>在某些情况下,我们浏览器可能会直接显示出未变异的Mustche标签</p>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span> <span class="hljs-attr">v-cloak</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">v-text</span>=<span class="hljs-string">"message"</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
</code></div></pre>
<ul>
<li>
<p>在vue解析之前,div中有一个属性v-cloak</p>
</li>
<li>
<p>在vue解析之后,div中没有一个属性v-cloak</p>
</li>
</ul>
<h2><a id="2__154"></a>2 绑定属性</h2>
<h3><a id="21_vbind_156"></a>2.1 v-bind</h3>
<p>场景:某些属性需要动态绑定</p>
<ul>
<li>
<p>比如动态绑定a元素的href属性</p>
</li>
<li>
<p>比如动态绑定img元素的src属性</p>
</li>
</ul>
<p>v-bind指令:</p>
<ul>
<li>
<p>作用:动态绑定属性</p>
</li>
<li>
<p>缩写::语法糖写法 直接冒号</p>
</li>
<li>
<p>预期:any(with argument)|Object(without argument)</p>
</li>
<li>
<p>参数:attrOrProp(optional)</p>
</li>
</ul>
<pre><code class="lang-"><div id="app">
<!-- 错误做法: 不能在属性中使用mustache语法-->
<!-- <img src="{{ imgURL }}" alt="">-->
<!-- 正确做法:使用v-bind指令 -->
<img v-bind:src="imgURL" alt="">
<a v-bind:href="aHref">有勇气的牛排</a>
<!-- 语法糖的写法 -->
<img :src="imgURL" alt="">
<a :href="aHref">有勇气的牛排</a>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: '#app',
data: {
imgURL: 'https://static.couragesteak.com/article/4b9785ac56dea2567e62ba08d1ca1767.png',
aHref: 'https://www.920vip.net/'
}
})
</script>
</code></pre>
<h3><a id="22_vbindclass_200"></a>2.2 v-bind绑定class</h3>
<h4><a id="221__202"></a>2.2.1 绑定方式:对象语法</h4>
<ul>
<li>对象语法的含义:class后面跟的是一个对象</li>
</ul>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-comment"><!-- 用法一:直接通过{ }绑定一个类 --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">:class</span>=<span class="hljs-string">"{'active':isActive}"</span>></span>Hello World<span class="hljs-tag"></<span class="hljs-name">a</span>></span>
<span class="hljs-comment"><!-- 用法二:也可以通过判断,传入多个值 --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">:class</span>=<span class="hljs-string">"{'active':isActive,'line':isLine}"</span>></span>Hello World<span class="hljs-tag"></<span class="hljs-name">a</span>></span>
<span class="hljs-comment"><!-- 用法三:和普通的类同时存在,并不冲突 --></span>
<span class="hljs-comment"><!-- 注:如果isActive和isLine都为true,那么会有title/active/line三个类 --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"title"</span> <span class="hljs-attr">:class</span>=<span class="hljs-string">"{'active':isActive,'line':isLine}"</span>></span>Hello World<span class="hljs-tag"></<span class="hljs-name">a</span>></span>
<span class="hljs-comment"><!--
用法四:如果过于复杂,可以放在一个methods或者computed中
注:classes是一个计算属性
--></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"title"</span> <span class="hljs-attr">:class</span>=<span class="hljs-string">"classes"</span>></span>Hello World<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
</code></div></pre>
<h4><a id="222__223"></a>2.2.2 绑定方式:数组语法</h4>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- 数组里面的值,加双引号是为值,不加双引号为变量 --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"title"</span> <span class="hljs-attr">:class</span>=<span class="hljs-string">"[active,line]"</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"title"</span> <span class="hljs-attr">:class</span>=<span class="hljs-string">"getClasses()"</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好,有勇气的牛排"</span>,
<span class="hljs-attr">active</span>: <span class="hljs-string">'666'</span>,
<span class="hljs-attr">line</span>: <span class="hljs-string">'777'</span>
},
<span class="hljs-attr">methods</span>: {
<span class="hljs-attr">getClasses</span>: <span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) {
<span class="hljs-keyword">return</span> [<span class="hljs-variable language_">this</span>.<span class="hljs-property">active</span>, <span class="hljs-variable language_">this</span>.<span class="hljs-property">line</span>]
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="23__251"></a>2.3 点击列表中哪一项,那么该项的文字变为红色</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">style</span>></span><span class="language-css">
<span class="hljs-selector-class">.active</span> {
<span class="hljs-attribute">color</span>: red;
}
</span><span class="hljs-tag"></<span class="hljs-name">style</span>></span>
</code></div></pre>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">v-for</span>=<span class="hljs-string">"(m, index) in movies"</span>
<span class="hljs-attr">:class</span>=<span class="hljs-string">"{active:index === currentIndex}"</span>
@<span class="hljs-attr">click</span>=<span class="hljs-string">"liClick(index)"</span>
></span>
{{ index }}{{ ' - ' + m }}
<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">movies</span>: [<span class="hljs-string">'灰太狼'</span>, <span class="hljs-string">'有勇气的牛排'</span>, <span class="hljs-string">'导演'</span>],
<span class="hljs-attr">currentIndex</span>: <span class="hljs-number">0</span>
},
<span class="hljs-attr">methods</span>: {
<span class="hljs-attr">liClick</span>: <span class="hljs-keyword">function</span> (<span class="hljs-params">index</span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">currentIndex</span> = index
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="24_vbindstyle_288"></a>2.4 v-bind绑定style</h3>
<ul>
<li>
<p>可以使用v-bind:style来绑定一些CSS内敛样式</p>
</li>
<li>
<p>在写CSS属性名的时候,比如font-size</p>
</li>
</ul>
<ol>
<li>
<p>我们可以使用驼峰式(cameCase)<code>fontSize</code></p>
</li>
<li>
<p>或短横线分隔(kebab-case,记得用单引号括起来)<code>'font-size'</code></p>
</li>
</ol>
<ul>
<li>绑定class有两种方式</li>
</ul>
<ol>
<li>对象语法</li>
</ol>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- <h2 :style="key(属性名): value(属性值)">{{ message }}</h2>--></span>
<span class="hljs-comment"><!-- 50px: 必须加上单引号,否则当做一个变量去解析 --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">:style</span>=<span class="hljs-string">"{fontSize: '50px'}"</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-comment"><!-- finalSize当成一个变量使用 --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">:style</span>=<span class="hljs-string">"{fontSize: finalSize + 'px',color:finalColor}"</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">:style</span>=<span class="hljs-string">"getStyles()"</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好,有勇气的牛排"</span>,
<span class="hljs-attr">finalSize</span>: <span class="hljs-number">60</span>,
<span class="hljs-attr">finalColor</span>: <span class="hljs-string">'red'</span>
},
<span class="hljs-attr">methods</span>:{
<span class="hljs-attr">getStyles</span>:<span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) {
<span class="hljs-keyword">return</span> {<span class="hljs-attr">fontSize</span>: <span class="hljs-variable language_">this</span>.<span class="hljs-property">finalSize</span> + <span class="hljs-string">'px'</span>,<span class="hljs-attr">color</span>:<span class="hljs-variable language_">this</span>.<span class="hljs-property">finalColor</span>}
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<ol start="2">
<li>数组语法</li>
</ol>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">:style</span>=<span class="hljs-string">"[baseStyle, baseStyle1]"</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好,有勇气的牛排"</span>,
<span class="hljs-attr">baseStyle</span>: {<span class="hljs-attr">backgroundColor</span>: <span class="hljs-string">'red'</span>},
<span class="hljs-attr">baseStyle1</span>: {<span class="hljs-attr">fontSize</span>: <span class="hljs-string">'100px'</span>}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h2><a id="3__352"></a>3 计算属性</h2>
<ol>
<li>某些情况下,我们可能需要对数据进行一些转换后再显示,或者需要将多个数据结合起来进行显示</li>
</ol>
<ul>
<li>
<p>比如:有firstName和lastName两个变量,我们需要显示完整的名称。</p>
</li>
<li>
<p>但是如果多个地方都需要完整的名称,就需要写多个{{ firstName }} {{ laseName }}</p>
</li>
</ul>
<ol start="2">
<li>我们可以将上面的代码转换成计算属性</li>
</ol>
<h3><a id="31__362"></a>3.1 基本操作</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ name + ' : ' + nameValue }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ name }} : {{ nameValue }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ getFullName() }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-comment"><!-- 计算属性 --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ fullName }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">name</span>: <span class="hljs-string">"昵称"</span>,
<span class="hljs-attr">nameValue</span>: <span class="hljs-string">"灰太狼"</span>
},
<span class="hljs-comment">// computed: 计算属性()</span>
<span class="hljs-attr">computed</span>: {
<span class="hljs-title function_">fullName</span>(<span class="hljs-params"></span>) {
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">this</span>.<span class="hljs-property">name</span> + <span class="hljs-string">' : '</span> + <span class="hljs-variable language_">this</span>.<span class="hljs-property">nameValue</span>
}
},
<span class="hljs-attr">methods</span>: {
<span class="hljs-title function_">getFullName</span>(<span class="hljs-params"></span>) {
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">this</span>.<span class="hljs-property">name</span> + <span class="hljs-string">' : '</span> + <span class="hljs-variable language_">this</span>.<span class="hljs-property">nameValue</span>
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="32__398"></a>3.2 复杂操作</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>总价格: {{ totalProce }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">books</span>: [
{<span class="hljs-attr">id</span>: <span class="hljs-number">110</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"C语言"</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">50</span>},
{<span class="hljs-attr">id</span>: <span class="hljs-number">111</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"操作系统"</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">60</span>},
{<span class="hljs-attr">id</span>: <span class="hljs-number">112</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"统计学习方法"</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">70</span>},
{<span class="hljs-attr">id</span>: <span class="hljs-number">113</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"鬼谷子"</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">30</span>},
{<span class="hljs-attr">id</span>: <span class="hljs-number">114</span>, <span class="hljs-attr">name</span>: <span class="hljs-string">"即兴演讲"</span>, <span class="hljs-attr">price</span>: <span class="hljs-number">35</span>}
]
},
<span class="hljs-attr">computed</span>: {
<span class="hljs-attr">totalProce</span>: <span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) {
<span class="hljs-keyword">let</span> result = <span class="hljs-number">0</span>
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-number">0</span>; i < <span class="hljs-variable language_">this</span>.<span class="hljs-property">books</span>.<span class="hljs-property">length</span>; i++) {
result += <span class="hljs-variable language_">this</span>.<span class="hljs-property">books</span>[i].<span class="hljs-property">price</span>
}
<span class="hljs-keyword">return</span> result
<span class="hljs-comment">// for (let i in this.books){</span>
<span class="hljs-comment">// this.books[i]</span>
<span class="hljs-comment">// }</span>
<span class="hljs-comment">//</span>
<span class="hljs-comment">// for(let book of this.books){</span>
<span class="hljs-comment">//</span>
<span class="hljs-comment">// }</span>
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="33_settergetter_438"></a>3.3 计算属性的setter和getter</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ fullName }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">name</span>: <span class="hljs-string">'昵称'</span>,
<span class="hljs-attr">nameValue</span>: <span class="hljs-string">'有勇气的牛排'</span>
},
<span class="hljs-attr">computed</span>: {
<span class="hljs-comment">// 计算属性一般是没有set方法,只读属性</span>
<span class="hljs-attr">fullName</span>: {
<span class="hljs-comment">// app.fullName='cc|cc'</span>
<span class="hljs-attr">set</span>: <span class="hljs-keyword">function</span> (<span class="hljs-params">newValue</span>) {
<span class="hljs-keyword">const</span> names = newValue.<span class="hljs-title function_">split</span>(<span class="hljs-string">'|'</span>);
<span class="hljs-variable language_">this</span>.<span class="hljs-property">name</span> = names[<span class="hljs-number">0</span>];
<span class="hljs-variable language_">this</span>.<span class="hljs-property">nameValue</span> = names[<span class="hljs-number">1</span>];
},
<span class="hljs-attr">get</span>: <span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) {
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">this</span>.<span class="hljs-property">name</span> + <span class="hljs-string">' : '</span> + <span class="hljs-variable language_">this</span>.<span class="hljs-property">nameValue</span>
}
},
<span class="hljs-comment">// 简洁写法</span>
<span class="hljs-comment">// fullName: function () {</span>
<span class="hljs-comment">// return this.name + ' : ' + this.nameValue</span>
<span class="hljs-comment">// }</span>
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="34_methods_473"></a>3.4 计算属性和methods的对比</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- 1. 直接拼接: 语法过于繁琐 --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ name }} {{ nameValue }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-comment"><!-- 2. 通过定义methods --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ getFullName() }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-comment"><!-- 3. 通过computed --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ fullName }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">name</span>: <span class="hljs-string">'昵称'</span>,
<span class="hljs-attr">nameValue</span>: <span class="hljs-string">'有勇气的牛排'</span>
},
<span class="hljs-attr">computed</span>: {
<span class="hljs-attr">fullName</span>: <span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) {
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">this</span>.<span class="hljs-property">name</span> + <span class="hljs-string">' : '</span> + <span class="hljs-variable language_">this</span>.<span class="hljs-property">nameValue</span>
}
},
<span class="hljs-attr">methods</span>: {
<span class="hljs-attr">getFullName</span>: <span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) {
<span class="hljs-keyword">return</span> <span class="hljs-variable language_">this</span>.<span class="hljs-property">name</span> + <span class="hljs-string">' : '</span> + <span class="hljs-variable language_">this</span>.<span class="hljs-property">nameValue</span>
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="35__505"></a>3.5 计算属性的缓存</h3>
<p>计算属性会进行缓存,如果多次使用时,计算属性只会调用一次</p>
<h2><a id="4__509"></a>4 事件监听</h2>
<h3><a id="41_von_511"></a>4.1 v-on基本使用</h3>
<ul>
<li>
<p>作用:绑定时间监听器</p>
</li>
<li>
<p>缩写:@</p>
</li>
<li>
<p>预期:Function | Inline Statement | Object</p>
</li>
<li>
<p>参数:event</p>
</li>
</ul>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- v-bind 语法糖 --></span>
<span class="hljs-comment"><!-- <h2 v-bind:title></h2>--></span>
<span class="hljs-comment"><!-- <h2 :title></h2>--></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ counter }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-comment"><!-- <button v-on:click="counter++">+</button>--></span>
<span class="hljs-comment"><!-- <button v-on:click="counter--">-</button>--></span>
<span class="hljs-comment"><!-- button v-on:click="increment">+</button>--></span>
<span class="hljs-comment"><!-- <button v-on:click="decrement">-</button>--></span>
<span class="hljs-comment"><!-- v-on 语法糖 --></span>
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"increment"</span>></span>+<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"decrement"</span>></span>-<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">counter</span>: <span class="hljs-number">0</span>
},
<span class="hljs-attr">methods</span>: {
<span class="hljs-title function_">increment</span>(<span class="hljs-params"></span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">counter</span>++
},
<span class="hljs-title function_">decrement</span>(<span class="hljs-params"></span>) {
<span class="hljs-variable language_">this</span>.<span class="hljs-property">counter</span>--
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="42_von_557"></a>4.2 v-on参数</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- 1. 时间调用的方法没有参数 --></span>
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"btn1Click()"</span>></span>按钮1<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"btn1Click"</span>></span>按钮1<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"><<span class="hljs-name">br</span>></span>
<span class="hljs-comment"><!--
2. 在事件定义时,写函数时省略了小括号,但是方法本身需要一个参数的,
这个时候Vue会默认将浏览器生产的event事件对象作为参数传入到方法
--></span>
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"btn2Click(123)"</span>></span>按钮2<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"btn2Click()"</span>></span>按钮2<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"btn2Click"</span>></span>按钮2<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"><<span class="hljs-name">br</span>></span>
<span class="hljs-comment"><!-- 3. 方法定义时,我们需要event对象,同时又需要其他参数 --></span>
<span class="hljs-comment"><!-- 在多用方法时,如何手动的获取到浏览器的event参数对象:$event --></span>
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"btn3Click(123,$event)"</span>></span>按钮3<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"><<span class="hljs-name">button</span>></span>按钮4<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好,有勇气的牛排"</span>
},
<span class="hljs-attr">methods</span>: {
<span class="hljs-title function_">btn1Click</span>(<span class="hljs-params"></span>) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'btn1Click'</span>);
},
<span class="hljs-title function_">btn2Click</span>(<span class="hljs-params">event</span>) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">"按钮2:"</span> + event);
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(event);
},
<span class="hljs-title function_">btn3Click</span>(<span class="hljs-params">abc, event</span>) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">"按钮3"</span>);
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(abc, event);
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="43_von_605"></a>4.3 v-on修饰符</h3>
<p>Vue提供了修饰符来帮助我们方柏霓处理一些事件</p>
<ul>
<li>
<p><code>.stop</code>:调用event.stopPropagation()</p>
</li>
<li>
<p><code>prevent</code>:调用event.preventDefault()</p>
</li>
<li>
<p><code>.{keyCode | keyAlias}</code>:只当事件是从特定键触发时才触发回调</p>
</li>
<li>
<p><code>.native</code>:监听组件根元素的原生事件</p>
</li>
<li>
<p><code>.once</code>:只触发一次回调</p>
</li>
</ul>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- 1. .stop修饰符的使用:阻止冒泡 --></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"divClick"</span>></span>
6666666
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click.stop</span>=<span class="hljs-string">"btnClick"</span>></span>按钮<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-comment"><!-- 2. .prevent修饰符的使用 ->form表单失效 --></span>
<span class="hljs-tag"><<span class="hljs-name">form</span> <span class="hljs-attr">action</span>=<span class="hljs-string">"test"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"submit"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"提交"</span> @<span class="hljs-attr">click.prevent</span>=<span class="hljs-string">"submitClick"</span>></span>
<span class="hljs-tag"></<span class="hljs-name">form</span>></span>
<span class="hljs-comment"><!-- 3. 监听某个键盘的键帽 --></span>
<span class="hljs-comment"><!-- <input type="text" @keyup="keyup">--></span>
<span class="hljs-comment"><!-- 监听 回车 --></span>
<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> @<span class="hljs-attr">keyup.enter</span>=<span class="hljs-string">"keyup"</span>></span>
<span class="hljs-comment"><!-- 4. .once修饰符的使用 --></span>
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click.once</span>=<span class="hljs-string">"btn2Click"</span>></span>按钮2<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好,有勇气的牛排"</span>
},
<span class="hljs-attr">methods</span>: {
<span class="hljs-title function_">btnClick</span>(<span class="hljs-params"></span>) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">"btnClick"</span>)
},
<span class="hljs-title function_">divClick</span>(<span class="hljs-params"></span>) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">"divClick"</span>)
},
<span class="hljs-title function_">submitClick</span>(<span class="hljs-params"></span>) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'submitClick'</span>)
},
<span class="hljs-title function_">keyup</span>(<span class="hljs-params"></span>) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'keyup'</span>)
},
<span class="hljs-title function_">btn2Click</span>(<span class="hljs-params"></span>) {
<span class="hljs-variable language_">console</span>.<span class="hljs-title function_">log</span>(<span class="hljs-string">'btn2Click'</span>)
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h2><a id="5__669"></a>5 条件判断</h2>
<h3><a id="51_vif_670"></a>5.1 v-if</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">v-if</span>=<span class="hljs-string">"isShow"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span>></span>666<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">isShow</span>: <span class="hljs-literal">true</span>
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="52_vif_velse_688"></a>5.2 v-if v-else</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">v-if</span>=<span class="hljs-string">"isShow"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span>></span>666<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">v-else</span>></span>
<span class="hljs-tag"><<span class="hljs-name">div</span>></span>isShow为false时, 显示我<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">isShow</span>: <span class="hljs-literal">true</span>
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="53_vif_velseif_velse_710"></a>5.3 v-if v-else-if v-else</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">v-if</span>=<span class="hljs-string">"score>=90"</span>></span>优秀<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">v-else-if</span>=<span class="hljs-string">"score>=80"</span>></span>良好<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">v-else-if</span>=<span class="hljs-string">"score>=60"</span>></span>及格<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">v-else</span>></span>不及格<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h1</span>></span>{{ result }}<span class="hljs-tag"></<span class="hljs-name">h1</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">score</span>: <span class="hljs-number">99</span>,
<span class="hljs-comment">// showMessage:"无"</span>
},
<span class="hljs-attr">computed</span>: {
<span class="hljs-title function_">result</span>(<span class="hljs-params"></span>) {
<span class="hljs-keyword">let</span> showMessage = <span class="hljs-string">''</span>
<span class="hljs-keyword">if</span> (<span class="hljs-variable language_">this</span>.<span class="hljs-property">score</span> >= <span class="hljs-number">90</span>) {
showMessage = <span class="hljs-string">'优秀'</span>
} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-variable language_">this</span>.<span class="hljs-property">score</span> >= <span class="hljs-number">80</span>) {
showMessage = <span class="hljs-string">'良好'</span>
} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (<span class="hljs-variable language_">this</span>.<span class="hljs-property">score</span> >= <span class="hljs-number">60</span>) {
showMessage = <span class="hljs-string">'及格'</span>
} <span class="hljs-keyword">else</span> {
showMessage = <span class="hljs-string">'不及格'</span>
}
<span class="hljs-keyword">return</span> showMessage
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="54__747"></a>5.4 用户登录切换的案例(小问题)</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">v-if</span>=<span class="hljs-string">"isUserLogin"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">label</span> <span class="hljs-attr">for</span>=<span class="hljs-string">"username"</span>></span>用户账号<span class="hljs-tag"></<span class="hljs-name">label</span>></span><span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"username"</span> <span class="hljs-attr">placeholder</span>=<span class="hljs-string">"用户账号"</span> <span class="hljs-attr">key</span>=<span class="hljs-string">"username"</span>></span>
<span class="hljs-tag"></<span class="hljs-name">span</span>></span>
<span class="hljs-tag"><<span class="hljs-name">span</span> <span class="hljs-attr">v-else</span>></span>
<span class="hljs-tag"><<span class="hljs-name">label</span> <span class="hljs-attr">for</span>=<span class="hljs-string">"email"</span>></span>用户邮箱<span class="hljs-tag"></<span class="hljs-name">label</span>></span><span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"email"</span> <span class="hljs-attr">placeholder</span>=<span class="hljs-string">"用户邮箱"</span> <span class="hljs-attr">key</span>=<span class="hljs-string">"email"</span>></span>
<span class="hljs-tag"></<span class="hljs-name">span</span>></span>
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"isUserLogin = !isUserLogin"</span>></span>切换类型<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">isUserLogin</span>: <span class="hljs-literal">true</span>
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="55_vshow_772"></a>5.5 v-show</h3>
<p>v-if和v-show对比</p>
<ul>
<li>
<p>v-if当条件为false时,压根不会有对应的元素在DOM中。</p>
</li>
<li>
<p>v-show当条件为false时,仅仅是将元素的display属性设置为none而已</p>
</li>
</ul>
<p>开发中国如何选择</p>
<ul>
<li>
<p>当需要在显示与隐藏之间切片很频繁时,使用v-show</p>
</li>
<li>
<p>当只有一次切换时,通常使用v-if</p>
</li>
</ul>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- v-if:当条件为false时,包含v-if指令的元素,根本就不会存在dom中--></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">v-if</span>=<span class="hljs-string">"isShow"</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-comment"><!-- v-show:当
条件为false时,v-show只是给我们的元素添加一个行内样式:display:none --></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span> <span class="hljs-attr">v-show</span>=<span class="hljs-string">"isShow"</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好,有勇气的牛排"</span>,
<span class="hljs-attr">isShow</span>: <span class="hljs-literal">true</span>
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h2><a id="6__811"></a>6 循环遍历</h2>
<h3><a id="61_vfor_812"></a>6.1 v-for遍历数组</h3>
<p>语法格式案例:</p>
<pre><div class="hljs"><code class="lang-html"># 不需要索引
v-for="movie in movies"
# 需要索引
v-for=(item,index) in items
</code></div></pre>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- 1. 在遍历的过程中,没有使用索引值(下标值) --></span>
<span class="hljs-tag"><<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">v-for</span>=<span class="hljs-string">"item in names"</span>></span>{{ item }}<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
<span class="hljs-comment"><!-- 2. 在遍历的过程中,获取索引值 --></span>
<span class="hljs-tag"><<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">v-for</span>=<span class="hljs-string">"(item, index) in names"</span>></span>
{{ index + 1 }} - {{ item }}
<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">names</span>: [<span class="hljs-string">'灰太狼'</span>, <span class="hljs-string">'有勇气的牛排'</span>, <span class="hljs-string">'导演'</span>]
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="62_vfor_847"></a>6.2 v-for遍历对象</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- 1. 在遍历对象的过程中,如果知识获取一个值,那么获取到的是value --></span>
<span class="hljs-tag"><<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">v-for</span>=<span class="hljs-string">"item in info"</span>></span>{{ item }}<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
<span class="hljs-comment"><!-- 2. 获取index, key和value 格式:(value, key) --></span>
<span class="hljs-tag"><<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">v-for</span>=<span class="hljs-string">"(value, key) in info"</span>></span>{{ key }} : {{ value }}<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
<span class="hljs-comment"><!-- 3. 获取key和value和index 格式:(value, key, index) --></span>
<span class="hljs-tag"><<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">v-for</span>=<span class="hljs-string">"(value, key, index) in info"</span>></span>{{ index + 1 }}-{{ key }} : {{ value }}<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">info</span>: {
<span class="hljs-attr">name</span>: <span class="hljs-string">'灰太狼'</span>,
<span class="hljs-attr">age</span>: <span class="hljs-number">18</span>,
<span class="hljs-attr">height</span>: <span class="hljs-number">1.88</span>
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="63_key_880"></a>6.3 使用过程添加key</h3>
<pre><div class="hljs"><code class="lang-html">
<span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">v-for</span>=<span class="hljs-string">"item in letters"</span> <span class="hljs-attr">:key</span>=<span class="hljs-string">"item"</span>></span>{{ item }}<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">letters</span>: [<span class="hljs-string">'A'</span>, <span class="hljs-string">'B'</span>, <span class="hljs-string">'C'</span>, <span class="hljs-string">'D'</span>, <span class="hljs-string">'E'</span>]
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="64__899"></a>6.4 数组方法</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"><<span class="hljs-name">li</span> <span class="hljs-attr">v-for</span>=<span class="hljs-string">"item in letters"</span> <span class="hljs-attr">:key</span>=<span class="hljs-string">"item"</span>></span>{{ item }}<span class="hljs-tag"></<span class="hljs-name">li</span>></span>
<span class="hljs-comment"><!-- <li v-for="item in letters">{{ item }}</li>--></span>
<span class="hljs-tag"></<span class="hljs-name">ul</span>></span>
<span class="hljs-tag"><<span class="hljs-name">button</span> @<span class="hljs-attr">click</span>=<span class="hljs-string">"btnClick"</span>></span>按钮<span class="hljs-tag"></<span class="hljs-name">button</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">letters</span>: [<span class="hljs-string">'A'</span>, <span class="hljs-string">'B'</span>, <span class="hljs-string">'C'</span>, <span class="hljs-string">'D'</span>, <span class="hljs-string">'E'</span>]
},
<span class="hljs-attr">methods</span>: {
<span class="hljs-title function_">btnClick</span>(<span class="hljs-params"></span>) {
<span class="hljs-comment">// 1 push方法</span>
<span class="hljs-comment">// this.letters.push('666','777')</span>
<span class="hljs-comment">// 2 pop() 删除数组中最后一个元素</span>
<span class="hljs-comment">// this.letters.pop();</span>
<span class="hljs-comment">// 3 shift() 删除数组中第一个元素</span>
<span class="hljs-comment">// this.letters.shift();</span>
<span class="hljs-comment">// 4 unshift() 在数组最前面添加元素</span>
<span class="hljs-comment">// this.letters.unshift('666', '777');</span>
<span class="hljs-comment">// 5 splice作用:删除元素/插入元素/替换元素</span>
<span class="hljs-comment">// 删除元素:第二个参数传入你要删除几个元素(如果没有传,就删除后面所有的元素</span>
<span class="hljs-comment">// 替换元素:第二个参数,表示我们要替换几个元素,后面是用于替换前面的元素</span>
<span class="hljs-comment">// 插入元素:第二个参数,传入0,并且后面跟上要插入的元素</span>
<span class="hljs-comment">// this.letters.splice(1, 0, '1', '2')</span>
<span class="hljs-comment">// 6 sort()</span>
<span class="hljs-comment">// this.letters.sort();</span>
<span class="hljs-comment">// 7 reverse()</span>
<span class="hljs-variable language_">this</span>.<span class="hljs-property">letters</span>.<span class="hljs-title function_">reverse</span>();
<span class="hljs-comment">// 修改</span>
<span class="hljs-comment">// 1非响应式</span>
<span class="hljs-comment">// 通过索引值修改数组中的元素</span>
<span class="hljs-comment">// this.letters[0] = '666'</span>
<span class="hljs-comment">// 2响应式</span>
<span class="hljs-comment">// this.letters.splice(0, 1, '666')</span>
<span class="hljs-comment">// set(要修改的对象, 索引值,修改后的值)</span>
<span class="hljs-title class_">Vue</span>.<span class="hljs-title function_">set</span>(<span class="hljs-variable language_">this</span>.<span class="hljs-property">letters</span>, <span class="hljs-number">0</span>, <span class="hljs-string">'666'</span>);
}
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h2><a id="7__957"></a>7 阶段案例</h2>
<p>购物车案例:</p>
<p>https://gitee.com/net920vip/vue-framework/tree/master/LearnVuejs01</p>
<p>https://github.com/net920vip/vue-framework/tree/master/LearnVuejs01</p>
<h2><a id="8_vmodel_964"></a>8 v-model</h2>
<ul>
<li>Vue中使用v-model指令来实现单元数和数据的双向绑定</li>
</ul>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">v-model</span>=<span class="hljs-string">"message"</span>></span>
</code></div></pre>
<p>等同于</p>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">:value</span>=<span class="hljs-string">"message"</span> @<span class="hljs-attr">input</span>=<span class="hljs-string">"message = $event.target.value"</span>></span>
</code></div></pre>
<h3><a id="81_vmodelcheckbox_976"></a>8.1 v-model结合checkbox类型</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- 1 checkbox单选框--></span>
<span class="hljs-comment"><!-- <label for="protocol">--></span>
<span class="hljs-comment"><!-- <input type="checkbox" id="protocol" v-model="isAgree">同意协议--></span>
<span class="hljs-comment"><!-- </label>--></span>
<span class="hljs-comment"><!-- <h2>您选择的是:{{ isAgree }}</h2>--></span>
<span class="hljs-comment"><!-- <button :disabled="!isAgree">下一步</button>--></span>
<span class="hljs-comment"><!-- 2 checkbox多选框--></span>
<span class="hljs-tag"><<span class="hljs-name">label</span> <span class="hljs-attr">for</span>=<span class="hljs-string">""</span>></span>
<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"checkbox"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"轻音乐"</span> <span class="hljs-attr">v-model</span>=<span class="hljs-string">"hobbies"</span>></span>轻音乐
<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"checkbox"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"国学"</span> <span class="hljs-attr">v-model</span>=<span class="hljs-string">"hobbies"</span>></span>国学
<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"checkbox"</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"思考"</span> <span class="hljs-attr">v-model</span>=<span class="hljs-string">"hobbies"</span>></span>思考
<span class="hljs-tag"></<span class="hljs-name">label</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>您的爱好是:{{ hobbies }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"><<span class="hljs-name">label</span> <span class="hljs-attr">v-for</span>=<span class="hljs-string">"item in originHobbies"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"checkbox"</span> <span class="hljs-attr">:value</span>=<span class="hljs-string">"item"</span> <span class="hljs-attr">:id</span>=<span class="hljs-string">"item"</span> <span class="hljs-attr">v-model</span>=<span class="hljs-string">"hobbies"</span>></span>{{ item }}
<span class="hljs-tag"></<span class="hljs-name">label</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">isAgree</span>: <span class="hljs-literal">false</span>, <span class="hljs-comment">// 单选框</span>
<span class="hljs-attr">hobbies</span>: [], <span class="hljs-comment">// 多选框</span>
<span class="hljs-attr">originHobbies</span>: [<span class="hljs-string">'国学'</span>, <span class="hljs-string">'轻音乐'</span>, <span class="hljs-string">'绘画'</span>, <span class="hljs-string">'摄影'</span>, <span class="hljs-string">'dj'</span>, <span class="hljs-string">'吉他'</span>]
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="82_vmodelselect_1013"></a>8.2 v-model结合select类型</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- 1 选择一个 --></span>
<span class="hljs-tag"><<span class="hljs-name">select</span> <span class="hljs-attr">name</span>=<span class="hljs-string">""</span> <span class="hljs-attr">id</span>=<span class="hljs-string">""</span> <span class="hljs-attr">v-model</span>=<span class="hljs-string">"hobby"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"国学"</span>></span>国学<span class="hljs-tag"></<span class="hljs-name">option</span>></span>
<span class="hljs-tag"><<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"轻音乐"</span>></span>轻音乐<span class="hljs-tag"></<span class="hljs-name">option</span>></span>
<span class="hljs-tag"><<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"绘画"</span>></span>绘画<span class="hljs-tag"></<span class="hljs-name">option</span>></span>
<span class="hljs-tag"></<span class="hljs-name">select</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>您的选择是:{{ hobby }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-comment"><!-- 1 选择多个 --></span>
<span class="hljs-tag"><<span class="hljs-name">select</span> <span class="hljs-attr">name</span>=<span class="hljs-string">""</span> <span class="hljs-attr">id</span>=<span class="hljs-string">""</span> <span class="hljs-attr">v-model</span>=<span class="hljs-string">"hobbies"</span> <span class="hljs-attr">multiple</span>></span>
<span class="hljs-tag"><<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"国学"</span>></span>国学<span class="hljs-tag"></<span class="hljs-name">option</span>></span>
<span class="hljs-tag"><<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"轻音乐"</span>></span>轻音乐<span class="hljs-tag"></<span class="hljs-name">option</span>></span>
<span class="hljs-tag"><<span class="hljs-name">option</span> <span class="hljs-attr">value</span>=<span class="hljs-string">"绘画"</span>></span>绘画<span class="hljs-tag"></<span class="hljs-name">option</span>></span>
<span class="hljs-tag"></<span class="hljs-name">select</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>您的选择是:{{ hobbies }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">hobby</span>: <span class="hljs-string">"绘画"</span>,
<span class="hljs-attr">hobbies</span>:[]
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<h3><a id="83_vmodel_1045"></a>8.3 v-model修饰符</h3>
<pre><div class="hljs"><code class="lang-html"><span class="hljs-tag"><<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>></span>
<span class="hljs-comment"><!-- 1 修饰符:lazy --></span>
<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">v-model.lazy</span>=<span class="hljs-string">"message"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ message }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-comment"><!-- 2 修饰符:number --></span>
<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"number"</span> <span class="hljs-attr">v-model.number</span>=<span class="hljs-string">"age"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>{{ age }}---{{ typeof age }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-comment"><!-- 3 修饰符:trim --></span>
<span class="hljs-tag"><<span class="hljs-name">input</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span> <span class="hljs-attr">v-model.trim</span>=<span class="hljs-string">"name"</span>></span>
<span class="hljs-tag"><<span class="hljs-name">h2</span>></span>您输入的名字:{{ name }}<span class="hljs-tag"></<span class="hljs-name">h2</span>></span>
<span class="hljs-tag"></<span class="hljs-name">div</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"../js/vue.js"</span>></span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
<span class="hljs-tag"><<span class="hljs-name">script</span>></span><span class="language-javascript">
<span class="hljs-keyword">const</span> app = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Vue</span>({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">"你好,有勇气的牛排"</span>,
<span class="hljs-attr">age</span>: <span class="hljs-number">0</span>,
<span class="hljs-attr">name</span>: <span class="hljs-string">''</span>
}
})
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></div></pre>
<p>作者:有勇气的牛排(同官网、公众号)</p>
留言