vue指令-6

简介: v-html 指令用于更新元素的 innerHTML,该部分内容作为普通的 HTML 代码插入,不会作为 vue 模板进行编译

v-html 指令

v-html 指令用于更新元素的 innerHTML,该部分内容作为普通的 HTML 代码插入,不会作为 vue 模板进行编译

代码演示:

<template><divid="app"><divv-html="message"></div></div></template><script>exportdefault {
name: 'App',
data() {
return {
message: '<h1>hello world</h1>'    }
  }
}
</script>


运行结果:


网络异常,图片无法展示
|


可以看出运行结果渲染出了个 h1 标签

注意:网站上动态渲染任意的 HTML 是非常危险的,因为很容易导致 XSS 攻击。切记只有可信的内容上使用 v-html 指令,不要在用户提交的内容上使用

v-once

v-once 指令可以让标签或组件只渲染一次,该指令不需要表达式,之后再次渲染时,标签、组件及其所有的子节点将视为静态内容并跳过,这可以用于优化更新性能

代码演示:

<template>
  <div id="app">
    <h1>{{title}}</h1>
    <a v-for="nav in navs" :href="nav.url" v-once>{{nav.name}}</a>
  </div>
</template>
<script>
export default {
  name: 'App',
  data() {
    return {
      title: 'v-once指令的用法',
      navs: [
        { name: '首页', url: '/home' },
        { name: '新闻', url: '/news' },
        { name: '新闻2', url: '/news2' }
      ]
    }
  }
}
</script>


运行结果:


网络异常,图片无法展示
|


v-once 指令渲染时看不出有什么不同,在看看下面代码:

<template>
  <div id="app">
    <h1>{{title}}</h1>
    <a v-for="nav in navs" :href="nav.url" v-once>{{nav.name}}</a>
    <button @click="adds">添加</button>
  </div>
</template>
<script>
export default {
  name: 'App',
  data() {
    return {
      title: 'v-once指令的用法',
      navs: [
        { name: '首页', url: '/home' },
        { name: '新闻', url: '/news' },
        { name: '新闻2', url: '/news2' }
      ]
    }
  },
  methods: {
    adds() {
      this.navs.push({ name: '新闻3', url: '/news3' })
    }
  }
}
</script>

复制代码

运行结果:

网络异常,图片无法展示
|


点添加是没有任何变化的,这就是 v-once 指令的作用,只渲染一次,渲染结果在之后将作为静态内容而存在

注意:v-once 只对 a 标签里的起作用,对 a 标签兄弟、父级是没有影响的,如果要对 a 标签兄弟、父级渲染一次需要再次添加 v-once

v-pre 指令

v-pre 指令也需要表达式,用于跳过这个元素和他的子元素的编译过程。v-pre 指令可以用来显示原始 Mustache 标签。对于大量没有指令的节点使用 v-pre 指令可以加快·编译速度

代码演示:

<template>
  <div id="app">
    <h1 v-pre>{{title}}</h1>
  </div>
</template>
<script>
export default {
  name: 'App',
  data() {
    return {
      title: 'v-pre指令的用法'
    }
  }
}
</script>


运行结果


网络异常,图片无法展示
|


v-pre 不会渲染出插值,而是直接渲染出 h1 标签的内容

v-cloak 指令

v-cloak 指令也不需要表达式,这个指令保持在元素上直到关联实例编译结束,编译结束后该指令被移除。当和 CSS 规则如[v-cloak]{display:none}一起使用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕

代码演示:

<template>
  <div id="app">
    <h1 v-cloak>{{title}}</h1>
  </div>
</template>
<script>
export default {
  name: 'App',
  data() {
    return {
      title: 'v-pre指令的用法'
    }
  }
}
</script>
<style>
[v-cloak] {
  display: none;
}
</style>

复制代码

运行结果


网络异常,图片无法展示
|


浏览器在加载页面时,如果网速比较慢或者页面较大,那么浏览器在构造完 DOM 树后会在页面中直接显示{{title}}字样,直到 vue 的 js 文件加载完毕,vue 实例创建模板编译后{{title}}才会被替换为数据对象中的内容。这个过程中,页面是会有闪烁的,这给用户的体验不好,如果加上 CSS 规则如[v-cloak]{display:none}一起使用就可以解决这个问题了

目录
相关文章
|
17天前
|
JavaScript API 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
19天前
|
JavaScript 前端开发 开发者
vue 数据驱动视图
总之,Vue 数据驱动视图是一种先进的理念和技术,它为前端开发带来了巨大的便利和优势。通过理解和应用这一特性,开发者能够构建出更加动态、高效、用户体验良好的前端应用。在不断发展的前端领域中,数据驱动视图将继续发挥重要作用,推动着应用界面的不断创新和进化。
|
20天前
|
JavaScript 前端开发 开发者
vue学习第一章
欢迎来到我的博客!我是瑞雨溪,一名热爱前端的大一学生,专注于JavaScript与Vue,正向全栈进发。博客分享Vue学习心得、命令式与声明式编程对比、列表展示及计数器案例等。关注我,持续更新中!🎉🎉🎉
23 1
vue学习第一章
|
20天前
|
JavaScript 前端开发 索引
vue学习第三章
欢迎来到瑞雨溪的博客,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中的v-bind指令,包括基本使用、动态绑定class及style等,希望能为你的前端学习之路提供帮助。持续关注,更多精彩内容即将呈现!🎉🎉🎉
22 1
vue学习第三章
|
20天前
|
缓存 JavaScript 前端开发
vue学习第四章
欢迎来到我的博客!我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。本文介绍了Vue中计算属性的基本与复杂使用、setter/getter、与methods的对比及与侦听器的总结。如果你觉得有用,请关注我,将持续更新更多优质内容!🎉🎉🎉
35 1
vue学习第四章
|
17天前
|
JavaScript 前端开发 开发者
Vue是如何劫持响应式对象的
Vue是如何劫持响应式对象的
19 1
|
17天前
|
JavaScript 前端开发 API
介绍一下Vue中的响应式原理
介绍一下Vue中的响应式原理
26 1
|
20天前
|
JavaScript 前端开发
vue学习第五章
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。自学前端2年半,正向全栈进发。如果你从我的文章中受益,欢迎关注,我将持续分享更多优质内容。你的支持是我最大的动力!🎉🎉🎉
24 1
|
17天前
|
JavaScript 前端开发 开发者
Vue是如何进行组件化的
Vue是如何进行组件化的
|
17天前
|
存储 JavaScript 前端开发
介绍一下Vue的核心功能
介绍一下Vue的核心功能