【博学谷学习记录】超强总结 用心分享|前端学习w21- vue指令(6)

122 阅读2分钟

用v-if和v-else去做判断,中间不能被打断,如:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>test</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <!-- 错误: -->
    <div id="root">
      <div v-if="n==1">{{a}}</div>
      <div v-else-if="n==2">{{b}}</div>
      <!-- v-if和v-else被打断了: -->
      <div>@</div>
      <div v-else-if="n==3">{{c}}</div>
      <div v-else-if="n==4">{{d}}</div>
      <div v-else style="font-weight: 700">{{e}}</div>
      <button @click="n++">点我n加一</button>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
          n: 0,
          a: '欢迎',
          b: '关注',
          c: '公众号',
          d: '学编程的GISer',
          e: '欢迎关注公众号:学编程的GISer',
        },
      });
    </script>
  </body>
</html>

8. v-text

用于将数据填充到标签中,作用于插值语法表达式类似,但是没有闪动问题 (如果数据中有HTML标签会将html标签一并输出 )

用法:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>test</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <div id="root">
      <h1>{{str}}</h1>
      <h1 v-text="str">公众号:</h1>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
          str: '学编程的GISer',
        },
      });
    </script>
  </body>
</html>

注意: 1. v-text会把解析到为文本完全替换掉标签里的内容,如上边例子中,页面上并没有显示出“公众号:”这几个字符,因为它被v-text完全替换掉了

  1. 不能解析字符串,v-text会把所有的字符串都当成正常的文本解析,不会当成标签,即使你的data里的str数据中有标签结构(比如: <h1>123</h1>

9. v-html

v-html和v-text的区别:它与v-text区别在于v-text输出的是纯文本,浏览器不会对其再进行html解析,但v-html会将其当html标签解析后输出。

…………………… 共同点:都会全部替换原本标签里的内容。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>test</title>
    <script src="../js/vue.js"></script>
  </head>
  <body>
    <div id="root">
      <div v-html="name"></div>
    </div>
    <script>
      Vue.config.productionTip = false;
      const vm = new Vue({
        el: '#root',
        data: {
          name: '<h1>Dapan</h1>',
        },
      });
    </script>
  </body>
</html>

cookie是浏览器存在硬盘里面的,浏览器刷新cookie也不会丢,而且cookie包含用户 的个人信息,不能随意泄露,但是,如果在网站上动态渲染HTML可能会导致XSS攻击:

image.png 总结:

v-html指令:

1.作用:向指定节点中渲染包含html结构的内容。

2.与插值语法的区别:

(1).v-html会替换掉节点中所有的内容,{{xx}}则不会。

(2).v-html可以识别html结构。

3.严重注意:v-html有安全性问题!!!!

(1).在网站上动态渲染任意HTML是非常危险的,容易导致XSS攻击。

(2).一定要在可信的内容上使用v-html,永不要用在用户提交的内容上!

10. v-cloak

1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性。
2.使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题。

下次课再讲!