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编译元素的内容。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容

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