Vue系列(二):Vue基础语法

Vue基础语法

内容概述

  • 插值操作
  • 绑定属性
  • 计算属性
  • 事件监听
  • 条件判断
  • 循环遍历
  • 阶段案例
  • v-model

一. 插值语法

1.1.Vue的template

  • 代码规范
    平常我个人习惯是缩进四个空格,但是大型的框架(比如Vue)大多是缩进两个空格,我们尽量习惯缩进两个空格。
  • Webstorm抽离模板
    选择文件-->设置--->code style--->代码模块-->选择Vue,复制你要抽离的代码,点击应用,再点击确定,就ok了,so easy!
    代码抽离步骤.png
  • Mustache
    如何将data中的文本数据,插入到HTML中呢?
    可以通过Mustache语法(也就是双大括号),并且数据是响应式的。
    Mustache: 胡子/胡须.
    {{}}就是 Mustache 的标示符,花括号里的 data 表示键名,这句的作用是直接输出与键名匹配的键值
    Mustach不仅仅可以直接写变量,也可以写简单的表达式,Mustach的使用如下
  <div id="app">
    <div>{{message}}</div>
    <div>{{message}},sunshine</div>
    <div>{{firstName + lastName}}</div>
    <div>{{firstName + " " + lastName}}</div>
    <div>{{firstName}} {{lastName}}</div>
    <div>{{firstName + lastName}}</div>
  </div>

    <!--  引入Vue-->
  <script src="../../Vuejs/vue.js"></script>

  <script>
    const app = new Vue({
        el: "#app",
        data: {
          message: "你好啊",
          firstName: "sun",
          lastName: "shine",
          counter: 0
        }
      })
    </script>
  • v-once指令的使用
    该指令后面不需要跟任何表达式(比如之前的v-for后面是由跟表达式的)
    并且被定义了 v-once 指令的元素或组件(包括元素或组件内的所有子孙节点)只能被渲染一次。首次渲染后,即使数据发生变化,也不会被重新渲染。一般用于静态内容展示。

    v-once指令的使用.png

  • v-html指令的使用
    某些情况下,我们从服务器请求到的数据本身就是一个HTML代码,如果我们直接通过{{}}来输出,会将HTML代码也一起输出。
    但是我们可能希望的是按照HTML格式进行解析,并且显示对应的内容。
    如果我们希望解析出HTML展示就可以使用v-html指令,该指令后面往往会跟上一个string类型,会将string的html解析出来并且进行渲染

    v-html指令.png

  • v-text指令的使用
    v-text作用和Mustache比较相似:都是用于将数据显示在界面中
    v-text通常情况下,接受一个string类型,比如下图,使用v-text后,div中的文本没有渲染。

    v-text指令.png

  • v-pre指令的使用
    v-pre用于跳过这个元素和它子元素的编译过程,用于显示原本的Mustache语法。
    比如下面的代码:
    第一个h2元素中的内容会被编译解析出来对应的内容
    第二个h2元素中会直接显示{{message}}

    v-pre指令.png

  • v-block指令的使用
    在某些情况下,我们浏览器可能会直接显然出未编译的Mustache标签,这样对用户的体验十分不好,通过v-cloak可以在未加载Vue的时候让Mustache标签不显示。
    cloak: 斗篷

    v-cloak指令.png

二. 绑定属性

2.1. v-bind的介绍

  • 前面我们学习的指令主要作用是将值插入到我们模板的内容当中。但是,除了内容需要动态来决定外,某些属性我们也希望动态来绑定。
  • 比如动态绑定a元素的href属性
  • 比如动态绑定img元素的src属性
  • 这个时候,我们可以使用v-bind指令:
    作用:动态绑定属性
    简写::
    预期:any (with argument) | Object (without argument)
    参数:attrOrProp (optional)

2.2.v-bind的基础

  • v-bind用于绑定一个或多个属性值,或者向另一个组件传递props值(这个到组件时再介绍)
  • 在开发中,有哪些属性需要动态进行绑定呢?
    比如图片的链接src、网站的链接href、动态绑定一些类、样式等等
    比如通过Vue实例中的data绑定元素的src和href,代码如下:
<div id="app">
      <div>{{message}}</div>
      <img v-bind:src="imgUrl" alt="">
      <a v-bind:href="link">百度</a>
    </div>

    <!--  引入Vue-->
    <script src="../../Vuejs/vue.js"></script>

    <script>
      const app = new Vue({
        el: "#app",
        data: {
          message: "你好啊",
          imgUrl: 'https://img11.360buyimg.com/mobilecms/s350x250_jfs/t1/20559/1/1424/73138/5c125595E3cbaa3c8/74fc2f84e53a9c23.jpg!q90!cc_350x250.webp',
          link: "https://www.baidu.com"
        }
      })
    </script>

2.3.v-bind语法糖

  • v-bind有一个对应的语法糖,也就是简写方式
  • 在开发中,我们通常会使用语法糖的形式,因为这样更加简洁。
  • 简写方式如下:


    v-bind语法糖.png

2.4.绑定class

  • 很多时候,我们希望动态的来切换class,比如:
    当数据为某个状态时,字体显示红色。
    当数据另一个状态时,字体显示黑色。
    *绑定class有两种方式:
  • 对象语法
    对象语法的含义是:class后面跟的是一个对象。
  • 用法一:直接通过{}绑定一个类
<h2 :class="{active: isActive}">Hello World</h2>
  • 用法二:也可以通过判断,传入多个值
<h2 :class="{active: isActive, 'line': isLine}">Hello World</h2>
  • 用法三:和普通的类同时存在,并不冲突
    注:如果isActive和isLine都为true,那么会有title/active/line三个类
<h2 class="title" :class="{active: isActive, line: isLine}">Hello World</h2>
  • 用法四:如果过于复杂,可以放在一个methods或者computed中
    注:classes是一个计算属性
<h2 class="title" :class="classes">Hello World</h2>
  • 数组语法
    数组语法的含义是:class后面跟的是一个数组。
  • 用法一:直接通过{}绑定一个类。注意:
<h2 :class="[active]">Hello World</h2>
  • 用法二:也可以传入多个值
<h2 :class=“[active, line]">Hello World</h2>
  • 用法三:和普通的类同时存在,并不冲突
    注:会有title/active/line三个类
<h2 class="title" :class=“[active, line]">Hello World</h2>
  • 用法四:如果过于复杂,可以放在一个methods或者computed中
    注:classes是一个计算属性
<h2 class="title" :class="classes">Hello World</h2>

2.5.绑定style样式

  • 我们可以利用v-bind:style来绑定一些CSS内联样式。
  • 在写CSS属性名的时候,比如font-size
    我们可以使用驼峰式 (camelCase) fontSize 或短横线分隔 (kebab-case,记得用单引号括起来) ‘font-size’
  • 绑定class有两种方式:
  • 对象语法
<div v-bind:style="{color: currentColor, fontSize: fontSize + 'px'}"></div>

style后面跟的是一个对象类型
对象的key是CSS属性名称
对象的value是具体赋的值,值可以来自于data中的属性

  • 数组语法
<div v-bind:style="[baseStyles, overridingStyles]"></div>

style后面跟的是一个数组类型,多个值以,分割即可

三.计算属性

3.1.什么是计算属性

  • 我们知道,在模板中可以直接通过插值语法显示一些data中的数据。
  • 但是在某些情况,我们可能需要对数据进行一些转化后再显示,或者需要将多个数据结合起来进行显示
    • 比如我们有firstName和lastName两个变量,我们需要显示完整的名称。
      但是如果多个地方都需要显示完整的名称,我们就需要写多个{{firstName}} {{lastName}}


      计算属性.png

我们可以将上面的代码换成计算属性:


image.png

OK,我们发现计算属性是写在实例的computed选项中的。

3.2.计算属性的复杂操作

  • 计算属性中也可以进行一些更加复杂的操作,比如下面的例子:


    计算属性的复杂操作.png

3.3.计算属性的setter和getter

  • 每个计算属性都包含一个getter和一个setter
    • 在上面的例子中,我们只是使用getter来读取。
    • 在某些情况下,你也可以提供一个setter方法(不常用)。
    • 在需要写setter的时候,代码如下:


      写setter.png

3.4.计算属性的缓存

  • 我们可能会考虑这样的一个问题:
    • methods和computed看起来都可以实现我们的功能,
    • 那么为什么还要多一个计算属性这个东西呢?
    • 原因:计算属性会进行缓存,如果多次使用时,计算属性只会调用一次。
      *我们来看下面的代码:


      image.png

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