Vue续

   1.绑定语法:学名: 插值语法 Interpolation  == {{}}

  什么是:让HTML可以自动找到程序中的变量的特殊语法

  为什么:因为传统的HTML是静态的,缺少动态变化的能力。导致js当中要想操作HTML,需要大量重复的代码。

  何时: 只要HTML中某个位置的数据,需要根据程序中的一个变量动态变化!都要用绑定语法!

  步骤:2步:

   1.先找页面中所有可能发生变化的地方有几处

   2. 再在模型数据中定义相同数量的变量:

     new Vue({

        el:"#app",

        data:{

        变量名:值,

             ... : ..., 

      }

     })

强调: HTML中有几处变化,data对象中就要有几个变量与之对应。

3.在HTML中,可能发生变化的位置用绑定语法定义变量: {{变量或表达式}}

强调:其实{{}}的用法和模板字符串中${}的用法完全一样!

能写:变量,算术计算,关系/逻辑运算,函数调用, 访问数组元素, 三目——凡是有返回值的js表达式都能

不能: if  else   while    for——都是程序结构,没有返回值!

结果:运行时,HTML中的所有{{}}会自动去data中找同名的变量使用。且内存中的data中的变量值发生变化,HTML中的{{}}的值自动变化!用户最终看到的是{{}}中的变量或者表达式计算后的值!而看不见双花括号——节省了大量重复的查找和修改操作。——多亏了MVVM中的ViewModel中的两大子系统: 响应系统和虚拟DOM树。


2. 指令:

  什么是:为HTML添加更多新功能的Vue预置的自定义属性

  为什么:因为原来HTML缺少程序必须的功能: 判断/分支结构,循环。。。功能。所以只能依靠js中反复查找,反复修改来控制HTML元素的内容和状态。

  如何:13种:

   1.绑定属性:

    什么是: v-bind属性专门动态绑定元素的属性值

    为什么: 要绑定属性值,不能用{{}},只能用v-bind或:简写

    何时:只要属性值需要根据变量动态变化时,就要用v-bind或:简写

    如何: <img v-bind:src="pm25<100?'img/1.png':

                pm25<200?'img/2.png':

                pm25<300?'img/3.png':

                           'img/4.png'">

         去{{}}换v-bind:

    其实可简写: <img v-bind:src="...

         去{{}}换:

2.控制元素的显示隐藏:

1.控制一个元素的显示隐藏:

<ANY v-show="判断条件"

只要条件满足,就显示元素

一旦条件不再满足,就隐藏元素!

2.控制多个元素,多选一显示:

<ANY v-if="判断条件"单用时

  v-if从现象上看,和v-show是完全一样的

但是原理不一样

          鄙视: v-show vs v-if的差别:

          v-show用display:none控制显示隐藏

          v-if用删除节点的方式,控制显示隐藏

          如果一个元素频繁需要显示隐藏,v-show的效率高!

        和v-else-if   v-else配合使用:

<元素1 v-if="条件1"            <元素2 v-else-if="条件2"

                ...  ...

<元素n v-else 

强调: v-if和v-else-if和v-else之间禁止插入一切其他元素。必须连续写!

  原理: Vue会自动判断每个条件:

哪个条件符合,就只显示哪个条件的元素。其余元素都不显示。

如果前一个条件已经满足,则后续判断都不再执行。所以,不可能同时显示多个元素。

如果所有条件都不满足,会显示v-else的元素


3.根据数组反复生成多个相同结构的HTML元素:

其实就是为HTML添加循环功能:

如何:

1. data中必须先定义一个可遍历的数组

2.在HTML中使用v-for遍历数组,反复生成多个相同结构的元素,并动态绑定元素的内容。

语法:

<要反复生成的元素 v-for="(elem,i) of数组" :key="i"

强调:特例: v-for中的循环变量可被v-for自己或子元素用于绑定!


4.事件绑定:

v-on:事件名="处理函数"

可简写为:

@事件名="处理函数"

强调:

1.处理函数必须定义在:

           new Vue({

             el:"#app",

 data:{ ... },

 methods:{

处理函数(){

      this.data中变量

                }

            }

           })中的methods:{}结构中

2. 其实可以传参: @事件名="处理函数(实参值)"

3.也可以用事件对象e:用法和DOM中完全一样

获得e: methods:{

事件处理函数(e){ ... }

    }

后续:

获得目标元素,实现事件委托:e.target

取消冒泡: e.stopPropagation()

阻止默认行为: e.preventDefault();

键盘事件中获得键盘号: e.keyCode

获得鼠标坐标位置: e.screenX, e.screenY

e.clientX, e.clientY

e.offsetX, e.offsetY


5.避免用户短暂看到{{}}

问题:如果new Vue加载慢,则可能短暂看到{{}}

解决: v-cloak可让元素在new Vue加载之前暂时隐藏。当newVue加载完成后,会自动查找页面中的所有v-cloak斗篷删除该属性,让元素显示出来。

  强调: v-cloak没有属性值!

问题: v-cloak空有属性名,没有配套的样式

  解决:只能自己手写!用属性选择器:

[v-cloak]{display:none}

强调: v-cloak不能改名!改名了,vue就找不到了!

其实,除了v-cloak外,还可用v-text代替{{}}绑定元素内容,避免短暂看到{{}}

如何:

<ANY v-text="`js模板字符串语法,用${变量}动态生成内容`"

比如:

<h1 v-text="`姓名:${uname}`"></h1>

   <h2 v-text="`性别:${sex==1?'男':'女'}`"></h2>

原理:v-text在未绑定时,是一个浏览器不认识的属性,所以,显示不出来。直到new Vue加载完,认出v-text,才用V-text的内容代替元素的innerHTML内容。

     v-cloak vs v-text:

v-cloak:需要额外添加css样式,且需要选择放在哪个元素上,隐藏什么范围内的元素。整个网页都隐藏,用户体验还是不好的。

v-text:仅对当前元素有效,不会影响其它元素的显示不显示。用户体验比v-cloak要好。但是使用反引号的语法,很晦涩。


6.绑定HTML片段:

问题:使用{{}}绑定HTML片段,VUE不会解析HTML片段为网页内容。而是原样显示HTML代码

解决:今后,只要绑定一段HTML片段,必须用v-html。

如何:

7.只在页面加载之初,绑定一次。之后及时数据变化,也不反复更改页面:v-once

强调: v-once没有任何属性值,写在元素中,就起作用

原理:

在构建虚拟DOM树时,会扫描到v-once的元素,所以首次绑定,能绑定v-once的元素的内容。

首次绑定后,v-once的元素会从虚拟DOM树中移除。从此,再出发变量改变时,不会再修改v-once的元素。

8.万一内容的正文中,有{{}},但是不是用于绑定的,会出错。

解决: v-pre可阻止内容中的{{}}被编译,而是让{{}}原样显示。


总结:

1.如果元素内容要变化:

用{{变量或表达式}} 绑定

也可用v-text="`变量或表达式`"

2.如果元素的属性值要变化: 用 :属性名="变量或表达式" 绑定

3.一个元素控制显示隐藏: v-show="条件"

4.多个元素选其一显示:

v-if="条件"  v-else-if="条件"   v-else

5.反复生成多个相同结构的元素时:

v-for="(elem, i ) of数组" :key="i"

6.只要绑定事件处理函数都用:@事件名="处理函数"

7. 只要不希望用户短暂看到{{}}语法:

v-cloak或 v-text

8.只要绑定HTML片段: v-html

9. 只要希望只在页面加载之初绑定一次,之后不再变化,就用v-once.

10.如果内容中包含不想被vue编译的{{}}正文,可用v-pre阻止VUE编译元素的内容。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 8,192评论 1 4
  • 第一章 Vue概述 what? Vue是实现UI层的渐进式js框架,核心库关注视图层,简单的ui构建,复杂的路由控...
    fastwe阅读 4,134评论 0 0
  • 本章内容:认识 Vue.js、数据绑定、计算属性、内置指令 一、初始 Vue.js 1.1 Vue.js 是什么 ...
    了凡和纤风阅读 10,935评论 0 13
  • 主要还是自己看的,所有内容来自官方文档。 介绍 Vue.js 是什么 Vue (读音 /vjuː/,类似于 vie...
    Leonzai阅读 8,731评论 0 25
  • 1概述 上一章我们说了Vue是用于构建用户界面的框架,它最终呈现给用户的是一个一个HTML标签。Vue可以使用HT...
    书上得来终觉浅阅读 3,517评论 1 0

友情链接更多精彩内容