当前位置: 首页 > news >正文

Vue如何处理数据、v-HTML的使用及总结

Vue如何处理数据、v-HTML的使用及总结

Vue是如何处理数据的

  • 这里我们先看一段代码
const app = Vue.createApp({data() {return {courseGoalA: '学习Vue,最终掌握Vue',courseGoalB: '掌握Vue,并构建相应的应用程序',vueLink: 'https://cn.vuejs.org/'};},methods: {outputGoal() {const ran = Math.random();if (ran > 0.5) {return this.courseGoalA;} else {return this.courseGoalB;}}}
});app.mount('#user-goal');

在这里插入图片描述

这里的courseGoalA和courseGoalB并不是变量,为什么在方法中可以调用他呢?为什么这个this可以指向正确的位置呢?Vue是如何处理这些数据的?

  1. 当调用 createApp() 创建实例时,Vue 会将 data() 返回对象的所有属性 代理到 Vue 实例 上。
  2. Vue 自动将 methods 中所有函数的 this 绑定到当前 Vue 实例。因此,在 outputGoal 中,this 指向 Vue 实例本身,可以通过 this.courseGoalA 访问代理的属性。
  • 如果你学习过JavaScript,其背后的基本原理是这样的
const vm = {}; // 代表 Vue 实例// 1. 将 data 属性转为响应式
const data = { courseGoalA: '学习Vue...', courseGoalB: '掌握Vue...',vueLink: 'https://...'
};
vm._data = reactive(data); // 转换为响应式对象// 2. 代理数据:将 _data 的属性映射到实例顶层
for (const key in data) {Object.defineProperty(vm, key, {get() { return vm._data[key]; },set(value) { vm._data[key] = value; }});
}// 3. 绑定 methods 的 this
vm.outputGoal = methods.outputGoal.bind(vm);

使用v-HTML输出原始HTML内容

const app = Vue.createApp({data() {return {courseGoalA: '学习Vue,最终掌握Vue',courseGoalB: '掌握Vue,并构建相应的应用程序',vueLink: 'https://cn.vuejs.org/'};},methods: {outputGoal() {const ran = Math.random();if (ran > 0.5) {return this.courseGoalA;} else {return '<h2>掌握Vue,并构建相应的应用程序</h2>';}}}
});app.mount('#user-goal');
  • 如果我们想在P标签中插入HTML的原始内容,仅使用插值的方式是不行的,我们需要使用v-html来显示HTML原始的内容
<section id="user-goal"><h2>My Course Goal</h2><p v-html="outputGoal()"></p><p>学习更多的关于Vue的知识<a v-bind:href="vueLink ">Vue官网</a></p></section>

在这里插入图片描述

使用v-html会绕过使用插值内置的跨站脚本防护

  1. v-html不会对内容进行转义,这也意味这插入的恶意JavaScript代码也会被执行;
  2. Vue 默认对所有插值表达式进行 HTML 转义,提供 XSS 防护,v-html 会绕过这种内置防护;
  3. 所以在使用V-html的时候,需要你保证插入的是可信的内容;

第一部分总结-我们学习了什么?

  1. 如何创建Vue APP,如何连接它;
  2. 使用mount将应用实例挂载到实际的DOM元素中;
  3. 使用插值语法输出响应式内容;
  4. 使用v-bind绑定指令;
  5. 使用v-html来输出原始的HTML内容;
  6. data选项和methods选项;
http://www.lryc.cn/news/579709.html

相关文章:

  • 8分钟讲完 Tomcat架构及工作原理
  • Node.js与Webpack
  • 前端面试专栏-算法篇:17. 排序算法
  • Spring SseEmitter 系统详细讲解
  • XILINX FPGA如何做时序分析和时序优化?
  • 手机内存融合是什么意思
  • Redis—哨兵模式
  • C++之路:类基础、构造析构、拷贝构造函数
  • 算法学习笔记:5.后缀数组——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • MySQL 学习 之 你还在用 TIMESTAMP 吗?
  • Functionize 结合了 AI 与云平台的现代化自动化测试工具
  • MySQL 8.0 OCP 1Z0-908 题目解析(16)
  • curl for android
  • 高通QCS8550部署Yolov10模型与性能测试
  • ADC笔试面试题型和详细解析下
  • 蒙特卡洛方法:随机抽样的艺术与科学
  • c++ 的标准库 --- std::
  • {{ }}和v-on:click
  • 重学React(二):添加交互
  • 前端单元测试覆盖率工具有哪些,分别有什么优缺点
  • 鸿蒙操作系统核心特性解析:从分布式架构到高效开发的全景技术图谱
  • 深度学习-逻辑回归
  • 异步Websocket构建聊天室
  • 认识kubernetes kubeadm安装k8s
  • 触发器设计美国VPS:优化数据库性能的关键策略
  • 基于连接感知的实时困倦分类图神经网络
  • 云计算中的tap口、bond口、qr口:它们究竟有何玄机?
  • 配置diffusion policy并测试和训练 pushT demo模型
  • 一天两道力扣(1)
  • 【进阶篇-消息队列】——Kafka如何实现事务的