vue复习(1)

1、MVVM

什么是MVVM,MVVM就是Model-View-ViewModel的简写。

  • Model:指的是数据部分,对应到前端就是 JavaScript 对象。
  • View:指的就是视图部分
  • ViewModel: 就是连接视图与数据的中间件(中间桥梁)

下面这张图可以让抽象的认识MVVM。
在这里插入图片描述

下面这张图可以让大家具体的了解MVVM。
在这里插入图片描述
个人理解:view是我们看到的表面的东西,能呈现在人们视线的东西,个人认为是html+css,model是数据,隐藏在人们看不到的地方,viewmodel是交互,把他们连接起来的东西,也就是js逻辑。如果把MVVM比作一个超市,view就是顾客,model就是商品,viewmodel就是工作人员,顾客买东西必须得经过收纳员的手。

MVVM框架有三要素:响应式,模板引擎,渲染
响应式: vue 如何监听数据的变化?
模板: Vue 的模板如何编写和解析?怎样将具体的值替换掉 {{msg}} 内容,这就是模板引擎的解析。
渲染: Vue 如何将模板转换成 html ? 其实就是有虚拟 DOM 向真实 DOM 的转换。

2、模板语法

2.1 v-bind

<div id="app">
<h2 v-bind:title="msg">
{{msg}}
</h2>
</div>

在上面这个代码块里,我们给h2绑定了一个title属性,v-bind还可以简写成:
下面是效果图
在这里插入图片描述

在这里插入图片描述

2.2v-for

v-for可以指令于数组来渲染一个列表,被渲染的是数组item是数组源。如下图所示。

<template>
  <div id="app">
    <ul>
      <li v-for="item in list" :key="item.id">
        名字:{{ item.name }}编号:{{ item.id }}
      </li>
    </ul>
  </div>
</template>
<script>
export default {
  data: function () {
    return {
      list: [
        { name: 'aa', id: 1 }
      ]
    }
  }
}
</script>

在这里插入图片描述
注意: 为了能够保证列表渲染的性能,我们需要给 v-for 添加 key 属性。 key 值必须唯一,而且不能使用index 与 random 作为 key 的值。

2.3v-model

v-model就是我们经常用的数据双向绑定,通过改变model的值来改变view的值
例如下图
在这里插入图片描述

2.4v-on

v-on可以理解为js的点击事件,下面是代码和例图

<template>
  <div id="app">
    <span>{{ name }}</span>
    <!-- 通过v-on来指定对应的事件,然后后面跟上对应的方法名,方法的定义在methods完成 -->
    <button v-on:click="changeName">更换姓名</button>
  </div>
</template>
<script>
export default {
  data: function () {
    return {
      name: 'aa'
    }
  },
  methods: {
    changeName () {
      this.name = 'dsa'
    }
  }
}
</script>

在这里插入图片描述
v-on可以简写成@
下面是带参数的情况

<template>
  <div id="app">
    <span>{{ name }}</span>
    <!-- 通过v-on来指定对应的事件,然后后面跟上对应的方法名,方法的定义在methods完成 -->
    <button v-on:click="changeName('我是参数')">更换姓名</button>
  </div>
</template>
<script>
export default {
  data: function () {
    return {
      name: 'aa'
    }
  },
  methods: {
    changeName (name) {
      this.name = name
    }
  }
}
</script>

在这里插入图片描述
除了鼠标的单机事件还有绑定键盘的案例。

<template>
  <div id="app">
    <input type="text" @keydown.enter="change" />
  </div>
</template>
<script>
export default {
  data: function () {
    return {
      name: 'aa'
    }
  },
  methods: {
    changeName (name) {
      this.name = name
    },
    change () {
      console.log('键盘绑定')
    }
  }
}
</script>

在这里插入图片描述

2.5v-if

v-if是条件渲染,直接看代码

<div id="app">
<p v-if="users.length===0">没有任何用户数据</p>
<ul v-else>
<!-- users表示数组,item表示从数组中取出的对象,这个名字可以随意取 -->
<!-- 注意 v-for必须结合key属性来使用,它会唯一标识数组中的每一项,未来当数组中的那一项改变的
时候,它会只更新那一项,好处就是提升性能。注意key的值唯一,不能重复 -->
<!-- index表示数组的索引值,该名字可以随意定义 -->
<!-- <li
v-for="(item,index) in users"
:key="item.id"
:class="{actived:selectItem===item}"
@mousemove="selectItem=item"
>
编号:{{item.id}} 姓名:{{item.name}}---索引:{{index}}
</li> -->
<li
v-for="(item,index) in users"
:key="item.id"
:style="{backgroundColor:selectItem===item?'#dddddd':'transparent'}"
@mousemove="selectItem=item"
>
编号:{{item.id}} 姓名:{{item.name}}---索引:{{index}}
</li>
</ul>
</div>

如果user为空,这个p标签就会显示出来,否则的话,会渲染页面。
提到v-if就不得不说到v-show,这两个方法有异曲同工之妙
v-show 是通过 css 属性 display 控制元素显示,元素总是存在的。
v-if :通过控制 dom 来控制元素的显示和隐藏,如果一开始条件为 false ,元素是不存在的。
什么时候使用 v-show ,什么时候使用 v-if 呢?
如果需要频繁的控制元素的显示与隐藏,建议使用 v-show . 从而避免大量 DOM 操作,提高性能。
而如果某个元素满足条件后,渲染到页面中,并且以后变化比较少,可以使用 v-if

3、class与style绑定

直接上代码

<template>
  <div id="app">
    <input type="text" @keydown.enter="change" />
    <h2 :class="{ actived: true }">
      {{ name }}
    </h2>
  </div>
</template>
<script>
export default {
  data: function () {
    return {
      name: 'aa'
    }
  },
  methods: {
    changeName (name) {
      this.name = name
    },
    change () {
      console.log('键盘绑定')
    }
  }
}
</script>
<style scoped>
.actived {
  background-color: #dddddd;
}
</style>

在这里插入图片描述
在这里插入图片描述

当actived为true时会触发,为false时就不会触发。

<li
v-for="(item,index) in users"
:key="item.id"
:class="{actived:selectItem===item}"
@mousemove="selectItem=item"
>

这个代码是对slectItem的值判断,当鼠标移入时会让selectItem=item,这时selectItem===item为true,也会触发class绑定事件。
下面这个代码是style的绑定事件

<li
v-for="(item,index) in users"
:key="item.id"
:style="{backgroundColor:selectItem===item?'#dddddd':'transparent'}"
@mousemove="selectItem=item"
>
编号:{{item.id}} 姓名:{{item.name}}---索引:{{index}}
</li>

这里用了三元表达式,如果结果为true会触发?后的值。如果为false,会触发:后的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值