Xin's blog Xin's blog
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
    • 组件与插件
    • CSS扩展语言
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架面试题汇总
  • 基本面试题
  • 进阶面试题
  • 其它
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 前后端联调
  • mock.js
  • 奇技淫巧
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

Xin

英雄可不能临阵脱逃啊~
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
    • 组件与插件
    • CSS扩展语言
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • 前端框架面试题汇总
  • 基本面试题
  • 进阶面试题
  • 其它
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 前后端联调
  • mock.js
  • 奇技淫巧
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • HTML

  • CSS

  • JavaScript

  • Vue

    • 知识点

    • 方法

    • vue API

      • 全局api
      • 数据
      • 生命周期
      • 组合
      • 实例property
      • 实例方法 数据
      • 实例方法 事件
      • 指令
    • 组件与插件

    • css扩展语言

    • 学习笔记

    • 前端
    • Vue
    • vue API
    ctrlwin
    2021-07-09

    指令

    # 指令

    # v-text

    • 预期:string

    • 详细:

      更新元素的 textContent。如果要更新部分的 textContent,需要使用 插值。

    • 示例:

      <span v-text="msg"></span>
      <!-- 和下面的一样 -->
      <span>{{msg}}</span>
      
      1
      2
      3

    # v-html

    • 预期:string

    • 详细:

      更新元素的 innerHTML。注意:内容按普通 HTML 插入 - 不会作为 Vue 模板进行编译。如果试图使用 v-html 组合模板,可以重新考虑是否通过使用组件来替代。

      注意

      在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 XSS 攻击 (opens new window)。只在可信内容上使用 v-html,永不用在用户提交的内容上。

    • 示例

      <div v-html="html"></div>
      
      1

      vue官方说:在单文件组件 (opens new window)里,scoped 的样式不会应用在 v-html 内部,因为那部分 HTML 没有被 Vue 的模板编译器处理。

      简单说就是style的scoped属性导致css样式只对当前组件生效,而v-html渲染出来的内容可以理解为子组件的内容,所以css样式不会生效,要解决这个问题有以下几种方法:

      • 去掉scoped属性(不推荐,有可能会导致所有样式混乱)

      • 修改全局样式(不推荐,同上)

      • 使用 v-deep(推荐,和修改ui组件库的样式类似)

        <div class="text" v-html="<h3>this is test text</h3>"></div>
        
        ...
        // style
        ::v-deep.text {
          h3 {
            color: #ff0000;
          }
        }
        
        1
        2
        3
        4
        5
        6
        7
        8
        9

    # v-show

    • 预期:any

    • 用法:

      根据表达式之真假值,切换元素的 display CSS property。

      当条件变化时该指令触发过渡效果。

    • 示例

      <p v-show="isShow">something...</p>
      
      1

    # v-if、v-else、v-else-if

    • 预期:any

    • 用法:

      根据表达式的值来有条件地渲染元素。在切换时元素及它的数据绑定 / 组件被销毁并重建。如果元素是 <template>,将提出它的内容作为条件块。

      当条件变化时该指令触发过渡效果。

      注意

      ​ v-for优先级高于v-if,使用v-if时避免和v-for一起使用。

    # v-if 和 v-show的区别

    • v-if 和 v-show 都可以 实现通过判断是否显示元素 ,
    • v-if 如果为false 就直接在元素内删除, 当为true 的时候创建
    • v-show 是添加一个属性 display:none , 通过display 进行切换
    • 在性能 v-if 有较高的切换性能消耗
    • v-show 有较高的 初始渲染消耗
    • 根据以上性能特点, 如果元素涉及频繁的切换,最好不要使用v-if , 如果元素可能永远也不会被显示出来被用户看到, 则推荐使用 v-if.

    # v-for

    • 预期:Array | Object | number | string | Iterable (2.6 新增)

    • 用法:

      基于源数据多次渲染元素或模板块。此指令之值,必须使用特定语法 alias in expression。

      // 基础用法
      <div v-for="item in items">
        {{ item.text }}
      </div>
      
      // 为数组索引指定别名
      <div v-for="(item, index) in items"></div>
      
      // 为了更高效的更新虚拟DOM可以添加key
      <div v-for="item in items" :key="item.id"></div>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10

    # v-on

    • 缩写:@

    • 预期:Function | Inline Statement | Object

    • 参数:event

    • 修饰符:

      • .stop - 调用 event.stopPropagation()。
      • .prevent - 调用 event.preventDefault()。
      • .capture - 添加事件侦听器时使用 capture 模式。
      • .self - 只当事件是从侦听器绑定的元素本身触发时才触发回调。
      • .{keyCode | keyAlias} - 只当事件是从特定键触发时才触发回调。
      • .native - 监听组件根元素的原生事件。
      • .once - 只触发一次回调。
      • .left - (2.2.0) 只当点击鼠标左键时触发。
      • .right - (2.2.0) 只当点击鼠标右键时触发。
      • .middle - (2.2.0) 只当点击鼠标中键时触发。
      • .passive - (2.3.0) 以 { passive: true } 模式添加侦听器
    • 用法:

      绑定事件监听器。事件类型由参数指定。表达式可以是一个方法的名字或一个内联语句,如果没有修饰符也可以省略。

      用在普通元素上时,只能监听原生 DOM 事件 (opens new window)。用在自定义元素组件上时,也可以监听子组件触发的自定义事件。

      在监听原生 DOM 事件时,方法以事件为唯一的参数。如果使用内联语句,语句可以访问一个 $event property:v-on:click="handle('ok', $event)"。

      从 2.4.0 开始,v-on 同样支持不带参数绑定一个事件/监听器键值对的对象。注意当使用对象语法时,是不支持任何修饰器的。

      <!-- 方法处理器 -->
      <button v-on:click="doThis"></button>
      
      <!-- 动态事件 (2.6.0+) -->
      <button v-on:[event]="doThis"></button>
      
      <!-- 内联语句 -->
      <button v-on:click="doThat('hello', $event)"></button>
      
      <!-- 缩写 -->
      <button @click="doThis"></button>
      
      <!-- 动态事件缩写 (2.6.0+) -->
      <button @[event]="doThis"></button>
      
      <!-- 停止冒泡 -->
      <button @click.stop="doThis"></button>
      
      <!-- 阻止默认行为 -->
      <button @click.prevent="doThis"></button>
      
      <!-- 阻止默认行为,没有表达式 -->
      <form @submit.prevent></form>
      
      <!--  串联修饰符 -->
      <button @click.stop.prevent="doThis"></button>
      
      <!-- 键修饰符,键别名 -->
      <input @keyup.enter="onEnter">
      
      <!-- 键修饰符,键代码 -->
      <input @keyup.13="onEnter">
      
      <!-- 点击回调只会触发一次 -->
      <button v-on:click.once="doThis"></button>
      
      <!-- 对象语法 (2.4.0+) -->
      <button v-on="{ mousedown: doThis, mouseup: doThat }"></button>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38

    # v-bind

    • 缩写::

    • 预期:any (with argument) | Object (without argument)

    • 参数:attrOrProp (optional)

    • 修饰符:

      • .prop - 作为一个 DOM property 绑定而不是作为 attribute 绑定。(差别在哪里? (opens new window))
      • .camel - (2.1.0+) 将 kebab-case attribute 名转换为 camelCase(驼峰)。(从 2.1.0 开始支持)
      • .sync (2.3.0+) 语法糖,会扩展成一个更新父组件绑定值的 v-on 侦听器。
    • 用法:

      动态地绑定一个或多个 attribute,或一个组件 prop 到表达式。

      在绑定 class 或 style attribute 时,支持其它类型的值,如数组或对象。可以通过下面的教程链接查看详情。

      在绑定 prop 时,prop 必须在子组件中声明。可以用修饰符指定不同的绑定类型。

      没有参数时,可以绑定到一个包含键值对的对象。注意此时 class 和 style 绑定不支持数组和对象。

      <!-- 绑定一个 attribute -->
      <img v-bind:src="imageSrc">
      
      <!-- 动态 attribute 名 (2.6.0+) -->
      <button v-bind:[key]="value"></button>
      
      <!-- 缩写 -->
      <img :src="imageSrc">
      
      <!-- 动态 attribute 名缩写 (2.6.0+) -->
      <button :[key]="value"></button>
      
      <!-- 内联字符串拼接 -->
      <img :src="'/path/to/images/' + fileName">
      
      <!-- class 绑定 -->
      <div :class="{ red: isRed }"></div>
      <div :class="[classA, classB]"></div>
      <div :class="[classA, { classB: isB, classC: isC }]">
      
      <!-- style 绑定 -->
      <div :style="{ fontSize: size + 'px' }"></div>
      <div :style="[styleObjectA, styleObjectB]"></div>
      
      <!-- 绑定一个全是 attribute 的对象 -->
      <div v-bind="{ id: someProp, 'other-attr': otherProp }"></div>
      
      <!-- 通过 prop 修饰符绑定 DOM attribute -->
      <div v-bind:text-content.prop="text"></div>
      
      <!-- prop 绑定。“prop”必须在 my-component 中声明。-->
      <my-component :prop="someThing"></my-component>
      
      <!-- 通过 $props 将父组件的 props 一起传给子组件 -->
      <child-component v-bind="$props"></child-component>
      
      <!-- XLink -->
      <svg><a :xlink:special="foo"></a></svg>
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
    在GitHub上编辑 (opens new window)
    #vue
    上次更新: 2/23/2022, 5:36:03 PM

    ← 实例方法 事件 自定义饿了么分页器样式→

    最近更新
    01
    createElement函数创建虚拟DOM
    05-26
    02
    clipboard 剪切板属性
    05-26
    03
    vue的权限管理
    05-16
    更多文章>
    Theme by Vdoing | Copyright © 2021-2022 Xin | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×