MVVM : 将开发人员从繁琐的 DOM 操作中解放出来,抽取出 Model 层,实现数据发生变化,视图就自动发生变化


npm init -y

npm install vue@2
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
head>
<body>
<div id="app">
<h1>{{name}}, 非常好看~~h1>
div>
<script src="./node_modules/vue/dist/vue.js">script>
<script>
let vm = new Vue({
el: "#app",
data: {
name: "wanqing"
}
});
script>
body>
html>
特别注意 —— :
id="app" <div id="app">
<h1>{{name}}, 非常好看~~h1>
div>
<script src="./node_modules/vue/dist/vue.js">script>
在浏览器打开上面的页面,这样我们就能体会到让 Vue 实例绑定元素 ,从而元素能使用 Vue 强大的功能 的 Vue 框架的魅力了 (为浏览器安装 Vue 插件的方法这里不赘述)
使用 v-model 将某个位置的值和 data 中的值进行绑定 —— v-model 是双向绑定,视图变了原数据也会变
见如下实例:
<div id="app">
<input type="text" v-model="num">
<h1>{{name}}, 非常好看~~,有{{num}}个人也这么觉得h1>
div>
<script src="./node_modules/vue/dist/vue.js">script>
<script>
let vm = new Vue({
el: "#app",
data: {
name: "wanqing",
num: 1
}
});
script>
运行截图:
(ps: 才4个人觉得我好看,QAQ,点个赞赞安慰一下吧~~~ ~某女子为了要赞,竟然…)

使用 v-model 实时获取表单数据示例:
<div id="app">
wanqing 精通的语言:
<input type="checkbox" value="java" v-model="language"> java <br>
<input type="checkbox" value="js" v-model="language"> js <br>
<input type="checkbox" value="python" v-model="language"> python <br>
选中了:{{language.join(",")}}
div>
<script src="./node_modules/vue/dist/vue.js">script>
<script>
new Vue({
el: '#app',
data:{
language: []
},
method: {
}
});
script>
使用 v-on 进行事件绑定,如下实例为按钮点击事件绑定 click 事件,click事件为 num ++
<button v-on:click="num++">觉得wanqing好看button>
<script>
let vm = new Vue({
el: "#app",
data: {
name: "wanqing",
num: 1
}
});
script>
在创建 Vue 实例时,在 methods 属性中即为我们声明的方法,代码示例如下:
<script>
let vm = new Vue({
el: "#app",
data: {
name: "wanqing",
num: 1
},
methods: {
cancle(){ // 声明cancle方法,方法内操作为为 num--
this.num--;
}
}
});
script>
按钮事件绑定方法:在 click 后面加入方法名即可,代码示例如下:
<button v-on:click="cancle">取消喜欢button>
使用 v-html="要解析的值" 使得可以解析 html 语句。插值表达式的内容可以为 html ,也可以为方法返回值,也可以为表达式,这些都可以被解析。但是要注意的是插值表达式只可以用在标签体中。
<div id="app">
{{msg}} <br>
<span v-html="msg">span>
<span v-text="msg">span>
div>
<script src="./node_modules/vue/dist/vue.js">script>
<script>
new Vue({
el: '#app',
data:{
msg : "hello, wanqing
"
},
method: {
}
});
script>
使用 v-bind 给任意属性绑定值,注意这种绑定是单向绑定: 即数据变化,页面元素变化,反过来不成立
<div id="app">
<a v-bind:href="link">去百度a>
<span v-bind:class="{active:isActive, 'text-danger':hasError}"
v-bind:style="{color:color1}">你好鸭,动态绑定,是否加上与某个属性的 true \ false 有关 classspan>
div>
<script src="./node_modules/vue/dist/vue.js">script>
<script>
new Vue({
el: '#app',
data:{
link: "https://www.baidu.com",
isActive: false,
hasError: false,
color1: 'blue'
},
method: {
}
});
script>
v-bind 高级用法,对 class 和 style 进行增强,根据绑定值的不同,显示不同的样式
<div id="app">
<a v-bind:href="link">去百度a>
<span v-bind:class="{active:isActive, 'text-danger':hasError}"
v-bind:style="{color:color1}">你好鸭,动态绑定,是否加上与某个属性的 true \ false 有关 classspan>
div>
<script src="./node_modules/vue/dist/vue.js">script>
<script>
new Vue({
el: '#app',
data:{
link: "https://www.baidu.com",
isActive: false,
hasError: false,
color1: 'blue'
},
method: {
}
});
script>
使用 v-for 可以循环对象数组,也可以循环对象中的每个属性,其代码示例如下:
<div id="app">
<li v-for="(user, index) in users" :key="user.name">
当前索引: {{index}} {{user.name}} ==> {{user.age}} <br>
对象值信息:<span v-for="value in user">{{value}}span> <br>
对象键值对信息:<span v-for="(value, key, i) in user"> {{i}}({{key}}, {{value}}) span>
li>
<ul>
<li v-for="(num,index) in nums" :key="index">{{num}}li>
ul>
div>
<script src="./node_modules/vue/dist/vue.js">script>
<script>
new Vue({
el: '#app',
data:{
users: [
{name: "wangqing", age:20},
{name: "tian~", age:20},
{name: "xinyu", age:22}
],
nums: [1, 2, 3, 4, 5]
},
method: {
}
});
script>
两者区别:v-if 直接删除该位置的代码标签,v-show 是利用样式隐藏,代码示例如下:
<div id="app">
<button @click="show = !show">点击按钮button>
<h1 v-if="show"> show 为 true , 使用 v-if 可以看见我h1>
<h1 v-show="show"> show 为 true , 使用 v-show 可以看见我h1>
div>
<script src="./node_modules/vue/dist/vue.js">script>
<script>
new Vue({
el: '#app',
data:{
show: true
},
method: {
}
});
script>
v-else 结合 v-else-if 实现更强大的功能代码示例 ——
<div id="app">
<button @click="random = Math.random()">点击按钮button>
<h1 v-if="random >= 0.75"> random >= 0.75 看见我 h1>
<h1 v-else-if ="random >= 0.50"> random >= 0.5 看见我 h1>
<h1 v-else-if ="random >= 0.25"> random >= 0.25 看见我 h1>
<h1 v-else> 最后的else 看见我 h1>
div>
<script src="./node_modules/vue/dist/vue.js">script>
<script>
new Vue({
el: '#app',
data:{
random : 1
},
method: {
}
});
script>
计算属性用于实时获取值的变化展示计算结果,监听器属性也能实时监听值的变化并进行提醒,其代码示例如下:
<div id="app">
<li>wanqing; 价格: {{wanqingPrice}} , 数量: <input type="number" v-model="wanqingNum">li>
<li>西瓜; 价格:{{xiguaPrice}} , 数量: <input type="number" v-model="xiguaNum">li>
<li>总价: {{totalPrice}}li>
div>
<script src="./node_modules/vue/dist/vue.js">script>
<script>
let vm = new Vue({
el: "#app",
data: {
wanqingPrice: 100000000,
xiguaPrice: 1,
wanqingNum: 1,
xiguaNum: 20
},
computed: { // 计算属性,会动态监听,返回价值总和
totalPrice(){
return this.wanqingPrice*this.wanqingNum + this.xiguaNum * this.xiguaPrice
}
},
watch: { // 监听器属性,监听到有人试图修改刘婉晴的个数,就会提醒
wanqingNum: function(newVal, oldVal){
//alert(oldVal +" ==>" + newVal)
if(newVal != 1){
alert("想什么呢,婉晴只能有一个哦,不是0个也不是2个是一个")
this.wanqingNum = 1;
}
}
},
methods: {
cancle(){
this.num--;
}
}
});
script>
过滤器属性可以实现对某个值的过滤,如若性别值为 1,则返回 男; 而若性别值是 0,则返回女 —— 其可实现三目运算符的功能
<div id="app">
<h1>使用三木运算符实现男女过滤h1>
<li v-for="(user, index) in users" :key="user.name">
当前索引: {{index}} {{user.name}} ==> {{user.age}} ==> {{user.gender == 1 ? "靓仔" : "美女"}} <br>
li>
<h1>使用过滤器实现男女过滤h1>
<li v-for="(user, index) in users" :key="index">
当前索引: {{index}} {{user.name}} ==> {{user.age}} ==> {{user.gender | genderFilter}} <br>
li>
div>
<script src="./node_modules/vue/dist/vue.js">script>
<script>
Vue.filter("gFilter", function(val){ // 全局过滤器,在任何实例中都能用
if(val == 1){
return "靓仔"
} else{
return "美女"
}
})
new Vue({
el: '#app',
data:{
users: [
{name: "wangqing", age:20, gender:0},
{name: "tian~", age:20, gender:0},
{name: "xinyu", age:22, gender:1}
],
},
filters:{ // 过滤器属性
genderFilter(val){ // 过滤器接收一个值返回一个值
if(val == 1){
return "靓仔"
} else{
return "美女"
}
}
},
method: {
}
});
script>