Vue学习笔记(一)简单使用和插值操作
一、Vue是什么
参考链接:
根据官网的说法,Vue是一套用于构建用户界面的渐进式框架,即前端框架,它也是当前的三大前端框架之一。(其他两个框架分别是React
和 Angular
)
二、Vue简单体验
1. 声明式渲染
Vue.js
的核心是一个允许采用简洁的模板语法来声明式
地将数据渲染进 DOM 的系统:
我们将渲染所需要数据准备在填入到新建的Vue实例中的字典中:
const app = new Vue({
el: "#app", //用于挂载要管理的元素
data: {
// data中的内容即我们渲染所需要的内容
message: "你好啊,李银河!",
name: "zengziheng"
}
})
然后在body部分使用模板语法将其取出使用:
<body>
<div id="app">
<h2>{{message}}</h2>
<h1>{{name}}</h1>
</div>
<div>{{message}}</div>
</body>
运行结果:
![image-20210804145143125](https://gitee.com/warrior__night/my-picture-bed/raw/master/image-20210804145143125.png)
可以看到,只有在id="app"
的元素中使用模板语法才能取出对应的值,而在这个元素之外的部分则无效。
2. vue列表展示
我们先准备一个列表数据:
const app = new Vue({
el: "#app",
data: {
message: "你好啊",
movies: ['星际穿越', '大话西游', '少年派', '盗梦空间']
}
})
然后在body
中我们遍历列表将字符串取出:
<div id="app">
<ul>
<li v-for="item in movies"> {{item}} </li>
</ul>
</div>
运行结果:
![image-20210804145732498](https://gitee.com/warrior__night/my-picture-bed/raw/master/image-20210804145732498.png)
这个遍历方式和java
等语言中的for
循环基本相同(即 for(Object o : list)
)
此外,如果我们除了需要得到列表中的值之外还希望得到索引(index
)时,我们可以使用以下语法:
<div id="app">
<ul>
<li v-for="(item, index) in movies"> {{index}}-{{item}} </li>
</ul>
</div>
![image-20210804150340181](https://gitee.com/warrior__night/my-picture-bed/raw/master/image-20210804150340181.png)
3. 处理用户输入(事件监听)
在Vue
中我们使用v-on
指令添加一个事件监听器
,通过它调用在实例中定义的方法(即回调函数):
const app = new Vue({
el: "#app",
data: {
counter: 0
},
methods: {
add: function () {
console.log("add被执行");
this.counter++;
},
sub: function () {
console.log("sub被执行");
this.counter--;
}
}
})
<div id="app">
<h2>当前计数: {{counter}}</h2>
<!-- <button v-on:click="counter--">-</button>
<button v-on:click="counter++">+</button> -->
<button v-on:click="sub">-</button>
<button v-on:click="add">+</button>
<br>
<!-- 语法糖 -->
<button @click="sub">-</button>
<button @click="add">+</button>
</div>
即这里分别给两个按钮绑定了它们对应的点击事件,当它们被点击时,对应的回调函数则会被执行,进而变量counter
的值会随之改变,因为Vue
框架是响应式的,故最终渲染出来的结果也会发生改变。
![image-20210804151115512](https://gitee.com/warrior__night/my-picture-bed/raw/master/image-20210804151115512.png)
而@
则是v-on指令的语法糖
,方便我们编写对应的监听指令。
三、插值操作
1. Mustache语法
var app = new Vue({
el:'#app',
data:{
message:"你好啊",
firstName:"kobe",
lastName:"bryant",
counter:100,
}
});
在实例中准备变量。
然后在body
中对变量进行操作,并渲染:
<div id="app">
<h2> {{message}} </h2>
<h2> {{message}}, 李银河 </h2>
<h2> {{firstName + lastName}} </h2>
<h2> {{firstName + " " +lastName}} </h2>
<h2> {{counter*2}} </h2>
</div>
运行结果:
![image-20210804151733925](https://gitee.com/warrior__night/my-picture-bed/raw/master/image-20210804151733925.png)
可以看出,在Mustache
表达式中,我们可以对变量进行相应的运算,最终整个表达式可以作为一个字符串
进行渲染。
2. 常用v-指令
v-once
v-html
v-text
v-pre
v-cloak
v-once
使当前元素中的Mustache
表达式取出来的内容不再发生改变(即内容不是相应式的)
var app = new Vue({
el: '#app',
data: {
message: "你好啊",
},
methods: {
onClick() { this.message = "hello world"; }
}
});
<div id="app">
<h2>{{message}} </h2>
<h2 v-once>{{message}} </h2>
<button @click="onClick()">改变message</button>
</div>
运行时当点击按钮后:
![image-20210804152738846](https://gitee.com/warrior__night/my-picture-bed/raw/master/image-20210804152738846.png)
v-html
var app = new Vue({
el:'#app',
data:{
url:'<a href="http://www.baidu.com">百度一下</a>'
}
});
<div id="app">
<h2>{{url}} </h2>
<h2 v-html="url"></h2>
</div>
![image-20210804152919603](https://gitee.com/warrior__night/my-picture-bed/raw/master/image-20210804152919603.png)
即这个指令的功能是:将元素中的字符串作为html
代码进行解析后再渲染,而不是直接渲染出来。
v-text
和{{}}
的用法基本相同,一般不使用。
v-pre
跳过这个元素和它的子元素的编译过程。即在这个元素中的所有Mustache
表达式都无效。
var app = new Vue({
el:'#app',
data:{
message:"你好啊"
}
});
<div id="app">
<h2>{{message}}</h2>
<h2 v-pre>{{message}}</h2>
</div>
![image-20210804153937016](https://gitee.com/warrior__night/my-picture-bed/raw/master/image-20210804153937016.png)
v-cloak
保持和元素实例的关联,直到结束编译后自动消失。
即可以使用下面的方式来避免加载时出现{{xxx}}
:
var app = new Vue({
el:'#app',
data:{
message:"你好啊"
}
});
[v-cloak] {
display: none;
}
<div id="app" v-cloak>
{{message}}
</div>