MVC 与 MVVM 模式
VueJS的交互模式 —MVVM 交互
在这里不得不提下
MVC
模式了
MVC: 既是传统的开发模式,后台将数据提供给前台,然后前台获取到数据,将获取到的数据利用模板或者利用事件将其显示在前台页面上。这种开发模式,会让中间的逻辑代码非常庞大,后期维护非常不利于维护。并且中间的逻辑代码太多,会导致过度依赖DOM
。一旦页面发生变化,那么修改将会变得无从下手
MVVM: 是现在比较流行的开发模式,将逻辑层的代码分出一些代码写在了HTML代码中。这样可以减少一些逻辑层代码的数量。并且可以避免逻辑层代码代码过于臃肿,而且M(数据层)跟V(视图层)没有耦合,
MVC:
mvvm:
Vue中的差值表达式
常见的为
这种类型的
1
2
3
4
5
6
7
8
9
10
11
12
13<div id="box">{{msg}}</div>
```
```javascript
<script src="./vue2.js"></script>
<script>
let vm = new Vue({
el:"#box",
data:{
msg:"你好啊?",
}
})
</script>三元表达式(Vue中不能使用if)
1
<div>{{isred?"red":"blue"}}</div>
1
2
3
4
5
6
7
8<script src="./vue2.js"></script>
<script>
new Vue({
el:"#box",
isred:true,
})
</script>
Vue中常见的指令
Vue中的指令一般是以 v-xxx 这种格式的。
- v-text=”变量名”
1 | <div v-text="msg" id="box"></div> <!--结合下面的js代码最后结果应该为 <div id="box">我是不是最棒的?</div> --> |
1 | <script src="./vue2.js"></script> |
v-html=”变量名”
- 跟上面的
v-html
一样的用法,不同的是,如果上面数据里的msg
变量带HTML标签的时候,它会解析变量值中的标签
- 跟上面的
- v-bind:属性=”变量名” — 绑定普通的数据
1 | <div id="box"> |
1 | <script src="./vue2.js"></script> |
v-bind(绑定class类名以及style样式)
- ** 绑定class类名**
1
2
3
4
5
6
7
8
9
10<div id="box">
<p v-bind:class={red:isRed}>isRed</p>
//1. 当isRed为true的时候,p的class类名才是red,当isRed为false的时候,p没有class类名
<div v-bind:class="[classA, classB]">classA, classB</div>
//2. 这样写是将变量classA以及变量classB的值作为div的class类名 结果为 <div v-bind:class="A B">classA, classB</div>
<div v-bind:class="[classA,{classB:isB, classC:isC}]"></div>
//3. 给同一个元素绑定多个类名的时候,当变量classB和classC的值都为true的时候,classB以及classC才起作用
</div>1
2
3
4
5
6
7
8
9
10
11
12
13
14<script src="./vue2.js"></script>
<script>
let vm = new Vue({
el:"#box"
//el的值可以填写class选择器,也可以是DOM元素(document.getElenmentById("box")),el的作用就是标识出这段数据是作用在哪个区域。
data:{
isRed:true,
classA:"A",
classB:"B",
isB:true,
isC:true,
}
})
</script>- 绑定style样式
1
2
3
4<div id="box">
<div v-bind:style="{color:red}"></div>
<div v-bind:style="[styleA,styleB]">styleA styleB</div>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
<script src="./vue2.js"></script>
<script>
let vm = new Vue({
el:"#box"
//el的值可以填写class选择器,也可以是DOM元素(document.getElenmentById("box")),el的作用就是标识出这段数据是作用在哪个区域。
data:{
red:"#f20",
styleA:{fontsize:"20px"},
styleB:{color:"#f20"}
}
})
</script>
- v-model(双向数据绑定) (vue –> html –> Vue)
这个双向数据绑定,只能给拥有value属性的元素绑定。
双向数据绑定,其实就是 Vue 里的
data
数据,影响页面,页面上的 HTML 里元素的value
值影响Vue。
1 | <div id="box"> |
1 | <script src="./vue2.js"></script> |
v-on绑定事件
- 绑定具体事件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20<body>
<div id="box">
<input type="text" v-bind:value="msg">
<input type="button" value="点击改变" v-on:click='onchage'>
</div>
</body>
<script src="./vue2.js"></script>
<script>
new Vue({
el:"#box",
data:{
msg:'往手机'
},
methods:{
onchage:function(){
this.msg = "网友"
}
}
})
</script>
v-show以及v-if
相同点
- 接收的值都为布尔值,如果接收的值为true,那么就显示绑定该指令的元素,如果为false,那么就会消失
不同点
v-if
是改变DOM元素消失与显示,v-show
是通过改变元素的style中的display
属性来改变元素显示隐藏。- v-if还可以跟v-else-if以及 v-else连用,这样可以达到原生js中的if…esle if..else这样的效果
如果是涉及到大量的DOM操作,使用
v-show
,如果是涉及到元素需要请求数据然后再作显示,那么就使用v-if
,平常优先使用v-show
v-bind和v-model的异同
不同点
v-bind可以绑定任意属性
v-model只能绑定含有
value
属性的元素v-bind是单向绑定数据
v-model是双向绑定数据
相同点
- v-bind和v-model都有给元素绑定属性值的特性
自定义指令
Vue内部提供了一个函数,可以将自定义的指令挂载到 Vue 上。
如果是创建私有指令。那么就需要写在
Vue
实例里 ,那么就可以在 Vue 实例中使用directives()
。如果是要创建公共指令,那么就可以使用Vue.directive()
inserted() 函数是指令插入到 DOM 节点的时候(即页面渲染完之后就会立马执行),就会执行
自定义指令里还有一个函数,
updata()
函数,这个函数是当绑定指令的值改变时就会被触发,它不止执行一次!
1 | <div id="app"> |
Vue中提供操作dom的方法
利用Vue 中的ref属性
1 | <!--不过在使用ref的时候,需要用到Vue中一个生命周期函数 mounted 这个生命周期函数,是由Vue内部提供的,当元素加载完之后,自动触发函数 --> |
利用 Vue 中的 filter
进行筛选元素
filter
过滤器一般用在差值表达式,跟v-bind
中
1 | <div id="app"> |
Vue中的computed
用来定义随依赖数据改变而改变的属性
优点是 它会缓存数据,如果所依赖的数据没有变化,那么他就不会重新计算,性能相对watch来说要好一些
1 | <div id="app"> |
评论加载中