Vue(一)vue 概述与用法、MVVM、绑定语法、vue 指令

简介: Vue(一)vue 概述与用法、MVVM、绑定语法、vue 指令

一、vue的使用

Vue.js

Vue.js - The Progressive JavaScript Framework

http://cn.vuejs.org


1. vue的下载

(1)只下载一个 vue.js 文件,引入网页使用


       vue 版本分为开发版和生产版,开发版(未压缩版)有完备的注释、代码格式,以及见名知意的变量名和极其友好的错误提示,可读性好,适合学习和开发之用,但是体积大,不适合生产环境快速下载运行。


       生产版(压缩版)去掉了所有数值和代码格式,极简化了变量名,去掉了友好的错误提示,体积小,适合生产环境快速下载运行,但是可读性差,不适合学习和开发之用。


(2)使用 vue 脚手架工具


       脚手架是一套已经包含核心功能的标准的半成品项目文件和文件夹结构,便于大项目的标准化和分工协作。


2. vue三步

1.做界面


       1.1 将界面中所有元素包裹在一个唯一的父元素下,通常用


<div id="app"></div>

       1.2 找到界面中将来可能随程序自动变化的位置,用{{ 变量名 }}来标记/占位;


       1.3 找到界面中将来可能触发事件的元素,用专门的语法:@事件名="事件处理函数名" 来标记。


2.创建一个 new Vue() 对象,用来监控 div 所包含的区域


var vm = new Vue({
  //vue对象中,必须用el属性,指出new Vue()要监控的区域
  el: "#app",
 })

3.定义模型对象,来保存界面中所需的所有变量和事件处理函数


       3.1 创建一个 data:{ } 来保存界面中所需的所有变量和初始值;


       3.2 创建一个 methods:{ } 来保存界面中所需的所有事件处理函数;


       注意:模型对象就是专门替界面保存变量和事件处理函数的特殊的对象


                   methods 中的事件处理函数中,如果要操作data中的变量,必须加 this.


                   不用考虑如何从界面取值和如何将新值放回界面,只需考虑如何把data中的变量值修改正确。


举例:vue 程序,模拟购物车加减商品数量;


<body>
  <!--VUE 3步-->
  <!--1. 先做界面
  1.1 将界面中所有元素包裹在一个唯一的父元素下<div id="app"></div>
  1.2 找到界面中将来可能随程序自动变化的位置,用{{变量名}}来标记/占位
  1.3 找到界面中将来可能触发事件的元素,用@事件名="事件处理函数名" 来标记-->
  <div id="app">
    <button @click="minus">-</button>
    <span>{{n}}</span>
    <button @click="add">+</button>
  </div>
  <script>
  //2. 创建一个new Vue()对象,来监控div所包含的区域
    var vm = new Vue({
      //vue对象中,必须用el属性,指出new Vue()要监控的区域
      el: "#app",
      //3. 定义模型对象,来保存界面中所需的所有变量和事件处理函数
      //3.1 先创建一个data:{}来保存界面中所需的所有变量和初始值
      data: {
        n: 0
      },
      //3.2 创建一个methods:{}来保存界面中所需的所有事件处理函数
      methods: {
        add() {
          this.n++;
        },
        minus() {
          if (this.n > 0) {
            this.n--;
          }
        }
      }
    })
  </script>
</body>

image.png    



二、MVVM

       以往 的前端代码往往分为三个部分:


HTML(专门定义网页的内容和结构)

CSS(专门为网页添加样式)

js(专门操作网页中的内容,为页面添加交互行为)

       但是 HTML 和 CSS 功能太弱,即使很小的修改,都要通过 JS 来操作,导致 js 中存在大量重复和冗余的工作。所以为了解决此问题,就需要用到 MVVM 设计模式。


1. MVVM设计模式

       MVVM 设计模式是对前端三大代码的重新划分,包括三部分;


(1)界面(View):包含以前的 HTML+CSS,让 HTML 也支持变量、判断、循环;


(2)模型对象(Model):专门保存页面中所需的变量和函数的特殊对象,


data:{ }  专门保存界面中所需的所有变量


methods:{ } 专门保存界面中所需的所有函数


(3)视图模型(ViewModel):专门负责将模型对象中的变量和函数,自动运送到界面中指定位置的特殊对象,自动将程序中的变量和函数运送到界面中所需的位置。并且还能自动保持界面显示与程序中的数据同步。


2. vue的绑定原理(vue框架如何实现 MVVM 设计模式)

(1)访问器属性


a. new Vue() 将 data:{ } 引入到 new Vue() 中时,先将 data 对象及其内部的内容全部隐藏;


b. new Vue() 自动为data中每个变量创建访问器属性,监视对每个变量的修改操作,访问器属性不再隶属于data对象,而是直接隶属于new Vue();


c. 只要在程序中修改变量,都会自动调用访问器属性的set()函数;


d. set() 函数中提前安插了一个通知函数(),可通知外部哪个变量值发生了变化;


e. methods 中所有的函数,进入 new Vue() 后,methods 对象就被打散,原 methods 中所有函数直接隶属于 new Vue() 对象;


f. methods 中的函数和 data 中的变量,最终会平级保存,都直接隶属于new Vue(),methods 中的函数,想操作 data 中的变量,必须加 this.。


(2)虚拟 DOM 树


       是专门保存界面中所有可能发生变化的元素的简化版 DOM 树;在创建完 data 和 methods 之后,根据 el 属性值的选择器所指的元素,去扫描界面中指定区域的元素,一边扫描真实 DOM 树,一边创建虚拟 DOM 树,只保存可能发生变化的元素。


a. 只要在程序中修改了变量值,就会自动触发访问器属性的 set(),自动执行 set() 中的通知函数,通知函数()通知虚拟 DOM 树哪个变量发生了变化;


b. 虚拟 DOM 树扫描自己内部保存的所有可能发生变化的元素,只找出受本次变量修改影响的元素;


c.可以用提前封装好的 DOM 操作,将变量的新值,自动修改回页面中显示。


小结(高频笔试面试):


· vue绑定原理:访问器属性、虚拟DOM树;


· 虚拟DOM树四大优点:


(1)内容少体积小:只保存可能变化的个别元素;


(2)遍历查找快:保存的元素少,所以每次遍历查找受影响的元素时比遍历原始DOM树快;


(3)修改效率高:每次只修改受影响的个别元素,不受影响的元素是不改变;


(4)避免重复编码:提前封装了DOM的增删改查+事件绑定操作。


三、绑定语法

      绑定语法是 在界面中标记可能发生变化的元素内容的特殊语法,只要发现一个元素的内容可能随程序自动改变时,都要用绑定语法来标记。


<元素>xxxx{{自定义变量名}}xxx</元素>

       {{ }} 的原理和模板字符串中的 ${ } 完全一样,可以放一切有返回值的合法的 js 变量或表达式如变量、三目、算术计算、访问数组元素、创建对象、调用函数;不能放分支、循环以及没有返回值的js表达式。


举例:使用{undefined{}}显示隐藏不同数据;

<body>
  <div id="app">
    <h3>Welcome:{{uname}}</h3>
    <h3>性别:{{sex == 1?"男":"女"}}</h3>
    <h3>小计:¥{{price*count.toFixed(2)}}</h3>
    <h3>下单时间:{{new Date(orderTime).toLocaleString()}}</h3>
    <h3>星期{{arr[day]}}</h3>
  </div>
  <script>
    new Vue({
      el: "#app",
      data: {
        //假设从服务器端请求回来个别数据,显示到页面上
        uname: "王麻子",
        sex: 1,
        price: 12.5,
        count: 5,
        orderTime: 1614158191101,
        arr: ["日", "一", "二", "三", "四", "五", "六"],
        day: new Date().getDay()
      }
    })
  </script>
</body>

效果如下:

image.png  


四、指令

       专门给 HTML 元素添加新功能的特殊 HTML 属性就是指令,含13种。


1. v-bind

       如果元素的属性值可能随程序自动变化,则不能用 {undefined{ }} 绑定,要用v-bind指令代替 {undefined{ }} 绑定属性值。格式如下:


<元素  v-bind:属性名="js变量或表达式">
//简写
<元素  :属性名="js变量或表达式"> 
//注意:
//加了: 之后就不需要{{}}了
//=右边的""就起到了{{}}的作用

原理:new Vue()在扫描页面时,只要发现 : 开头的属性,都会先自动计算=右边的js变量或表达式的值,然后将变量或表达式的值作为当前属性的属性值;


举例:根据pm2.5数值,显示不同表情;


<body>
  <div id="app">
    <!--
    如果pm25<100,显示img/1.png
    如果pm25<200,显示img/2.png
    如果pm25<300,显示img/3.png
    否则显示img/4.png
    -->
    <img :src="
      pm25<100 ? 'img/1.png':
      pm25<200 ? 'img/2.png':
      pm25<300 ? 'img/3.png':
                 'img/4.png'
    ">
  </div>
  <script>
    var vm = new Vue({
      el: "#app",
      data: {
        //程序中只保存pm2.5的数值,不保存图片路径
        pm25: 200
      }
    })
  </script>
</body>

效果如下:

image.png



2. v-show

       专门控制一个元素显示隐藏的特殊指令,用程序控制一个元素的显示或隐藏时,都用v-show。


<元素  v-show="true/false">

原理:只要 new Vue() 扫描到 v-show,就会先计算=右边的判断条件的值,如果=右边的判断条件值为 true,则当前元素默认正常显示,如果=右边的判断条件值为 false,则 v-show 自动被翻译为style="display:none",表示当前元素隐藏。


举例:打开和关闭对话框;

<body>
  <!--VUE 3步
  1. 做界面: 
  1.1 唯一父元素
  1.2 找可能发生变化的元素
  本例中:id="pop"的div显示和隐藏状态来回切换。所以应该用v-show
  1.3 找触发事件的元素
  本例中: 两个触发事件按钮和超链接a
  -->
  <div id="app">
    <button @click="show">click me</button>
    <div v-show="visible" id="pop">
      <a @click="hide" href="javascript:;">×</a>
    </div>
  </div>
  <script>
    //2. 创建new Vue()对象,监控id为app的区域
    new Vue({
      el: "#app",
      //3. 创建模型对象: 
      //3.1 创建data对象
      // 本例中visible变量,控制对话框是否出现
      data: {
        visible: false //初始默认隐藏
      },
      //3.2 创建methods对象
      methods: {
        show() {
          this.visible = true //点击按钮时显示对话框
        },
        hide() {
          this.visible = false //点击×隐藏对话框
        }
      }
    })
  </script>
</body>

效果如下:对话框点击按钮显示,点击×隐藏。

image.png



3. v-if, v-else

       专门控制两个元素二选一显示,当要在两个元素之间选择一个时,就用 v-if 和 v-else。


<元素1  v-if="条件1">
<元素2  v-else>
//注意:
//else后无序再写等于
//元素1和2之间不能再有其他元素

原理:当 new Vue() 扫描到 v-if 时,先计算=右边条件变量或表达式的值,如果 v-if 等号右边的条件为 true,则 new Vue() 会保留 v-if 所在元素,删除 v-else 所在元素;如果 v-if 等号右边的条件为false,则 new Vue() 会先删除 v-if 所在的元素,保留 v-else 所在的元素。


举例:切换用户登录状态;

<body>
  <!--VUE 3步
  1. 做界面
  1.1 唯一父元素包裹
  1.2 找可能发生变化的元素
  本例中:两个div之间二选一显示一个,所以用v-if和v-else
  1.3 找触发事件的元素
  本例中: 触发事件的元素为注销和登录两个超链接
  -->
  <div id="app">
    <!--已登录时显示-->
    <div @click="logout" v-if="a">
      <h3>Welcome dingding <a href="javascript:;">注销</a></h3>
    </div>
    <!--未登录时显示-->
    <div v-else>
      <a @click="login" href="javascript:;">登录</a>
      <a href="javascript:;">注册</a>
    </div>
  </div>
  <script>
    //2. 创建new Vue()
    new Vue({
      el: "#app",
      //3. 创建模型对象
      //3.1 创建data对象
      data: {
        a: false //开始时用户默认未登录
      },
      //3.2 创建methods对象
      methods: {
        login() {
          this.a = true //点击login进入已登录界面
        },
        logout() {
          this.a = false
        }
      }
    })
  </script>
</body>

效果如下:

image.png


4. v-else-if

       和v-if和v-else一起控制多个元素多选一显示隐藏,只要控制多个元素选择一个显示隐藏时,都用v-else-if。


<元素1  v-if="条件1">
<元素2  v-else-if="条件2">
<元素3  v-else-if="条件3">
... ...
<元素n  v-else>
//注意:
//元素123之间不能有其他元素

原理:当new Vue()扫描到v-if时,先计算v-if后的条件,如果v-if条件为true,则保留v-if所在元素,删除其余v-else-if、v-else元素;如果v-if条件为false,则先删除v-if所在元素,然后,继续计算每个v-else-if后的条件;如果任意一个v-else-if的条件为true,则只保留着一个v-else-if所在元素,删除其余v-if、v-else-if和v-else元素;如果所有v-if和v-else-if的条件都不满足,则只保留v-else,删除其余v-if和v-else-if的元素。


举例:使用v-else-if实现根据pm2.5数值不同显示不同的表情;

<body>
  <!--如果pm25<100,显示1.png
      如果pm25<200,显示2.png
      如果pm25<300,显示3.png
      如果pm25>=300,显示4.png-->
  <!-- 本例中有多个元素需要多选一,所以用v-if和v-else-if -->
  <div id="app">
    <img src="img/1.png" v-if="pm25<100">
    <img src="img/2.png" v-else-if="pm25<200">
    <img src="img/3.png" v-else-if="pm25<300">
    <img src="img/4.png" v-else>
  </div>
  <script>
    var vm = new Vue({
      el: "#app",
      data: {
        pm25: 600
      }
    })
  </script>
</body>
相关文章
|
15天前
|
数据采集 监控 JavaScript
在 Vue 项目中使用预渲染技术
【10月更文挑战第23天】在 Vue 项目中使用预渲染技术是提升 SEO 效果的有效途径之一。通过选择合适的预渲染工具,正确配置和运行预渲染操作,结合其他 SEO 策略,可以实现更好的搜索引擎优化效果。同时,需要不断地监控和优化预渲染效果,以适应不断变化的搜索引擎环境和用户需求。
|
2天前
|
JavaScript 前端开发
如何在 Vue 项目中配置 Tree Shaking?
通过以上针对 Webpack 或 Rollup 的配置方法,就可以在 Vue 项目中有效地启用 Tree Shaking,从而优化项目的打包体积,提高项目的性能和加载速度。在实际配置过程中,需要根据项目的具体情况和需求,对配置进行适当的调整和优化。
|
2天前
|
存储 缓存 JavaScript
在 Vue 中使用 computed 和 watch 时,性能问题探讨
本文探讨了在 Vue.js 中使用 computed 计算属性和 watch 监听器时可能遇到的性能问题,并提供了优化建议,帮助开发者提高应用性能。
|
2天前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
2天前
|
存储 缓存 JavaScript
Vue 中 computed 和 watch 的差异
Vue 中的 `computed` 和 `watch` 都用于处理数据变化,但使用场景不同。`computed` 用于计算属性,依赖于其他数据自动更新;`watch` 用于监听数据变化,执行异步或复杂操作。
|
1天前
|
JavaScript 前端开发 UED
vue学习第二章
欢迎来到我的博客!我是一名自学了2年半前端的大一学生,熟悉JavaScript与Vue,目前正在向全栈方向发展。如果你从我的博客中有所收获,欢迎关注我,我将持续更新更多优质文章。你的支持是我最大的动力!🎉🎉🎉
|
3天前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
1天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,熟悉JavaScript与Vue,正向全栈方向发展。博客内容涵盖Vue基础、列表展示及计数器案例等,希望能对你有所帮助。关注我,持续更新中!🎉🎉🎉
|
3天前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
8天前
|
JavaScript
Vue基础知识总结 4:vue组件化开发
Vue基础知识总结 4:vue组件化开发