首页 > 其他分享 >Vue2-内联脚本

Vue2-内联脚本

时间:2025-01-08 17:56:25浏览次数:1  
标签:脚本 Vue 渲染 绑定 响应 API Vue2 内联 data

vue2与vue3的差异

  1. 响应式系统的差异
    • Vue 2 使用 Object.defineProperty 实现响应式系统,而 Vue 3 使用了 Proxy。
    • 在 Vue 2 中,对于数组的响应式处理有一些限制,比如不能检测数组索引和长度的变化,而 Vue 3 中这些问题得到了解决。
  2. 组件和API的变化
    • Vue 2 中的组件选项(如 data, methods, computed 等)与 Vue 3 中可能有所不同,特别是在组合式 API(Composition API)的引入上。
    • Vue 3 引入了 setup 函数和响应式引用(ref, reactive),这在 Vue 2 中是没有的。
  3. 生命周期钩子的变化
    • Vue 3 中引入了一些新的生命周期钩子,如 beforeUnmountunmounted,它们在 Vue 2 中分别对应 beforeDestroydestroyed
  4. 模板和JSX的变更
    • Vue 3 支持更多编译时优化,模板的写法也更加灵活,例如 v-model 可以用在多个参数上。
    • Vue 3 的 JSX 写法也有所不同,特别是在使用 setup 函数时。
  5. 全局API和配置
    • Vue 2 中的一些全局 API 和配置(如 Vue.filter, Vue.mixin)在 Vue 3 中被移除或改为使用应用实例上的 API。

在学习 Vue 2 时可以重点掌握的内容:

  • Vue 2 的响应式原理:理解 Object.defineProperty 如何工作,以及如何追踪依赖和触发更新。
  • Vue 2 的选项式 API:深入理解 data, props, computed, methods, watch, lifecycle hooks 等组件选项的使用。
  • Vue 2 的指令:熟悉 v-if, v-for, v-bind, v-model, v-on 等指令的用法和原理。
  • Vue 2 的组件系统:学习组件的注册、组件间的通信(props, events, slots, provide/inject)。
  • Vue 2 的路由和状态管理:了解 Vue Router 和 Vuex 在 Vue 2 中的使用方式。
  • Vue 2 的性能优化:学习如何优化 Vue 2 应用的性能,比如使用 v-once, v-memo, Object.freeze 等。
  • Vue 2 的构建工具:熟悉 Vue CLI 和其插件系统,以及如何配置 Vue 2 项目。

创建项目

  • 通过npm安装Vue CLI(基于webpack):npm install -g @vue/cli
  • 创建一个新项目:vue create project-name

通过cdn引入vue2的方法:

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>

声明式渲染

<div id="app">
  {{ message }}
</div>

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})

响应式系统

// 数据对象
var data = { a: 1 }

// 该对象被加入到一个 Vue 实例中
var vm = new Vue({
  data: data
})

// 获得这个实例上的 property
// 返回源数据中对应的字段
vm.a == data.a // => true

// 设置 property 也会影响到原始数据
vm.a = 2
data.a // => 2

// ……反之亦然
data.a = 3
vm.a // => 3

// 添加一个新的 property, 不会触发任何视图的更新
vm.b = 'hi'

// 阻止修改现有的 property
Object.freeze(obj)

模板语法

插值与绑定指令

  • 原始HTML
    双大括号会将数据解释为普通文本,而非 HTML 代码。
    为了输出真正的 HTML,需要使用 v-html 指令:
// rawHtml: "<span style="color: red;">This should be red.</span>"
// 动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击
<p>Using mustaches: {{ rawHtml }}</p>
<p>Using v-html directive: <span v-html="rawHtml"></span></p>
  • 布尔类型属性绑定

    只要存在就意味着值为 true, 如果 isButtonDisabled 的值是 nullundefinedfalse,则 disabled attribute 不会被包含在渲染出来的 <button> 元素中。

<button v-bind:disabled="isButtonDisabled">Button</button>
  • 模板表达式
    模板表达式都被放在沙盒中,只能访问全局变量的一个白名单,如 MathDate 。不应该在模板表达式中试图访问用户定义的全局变量。

  • 动态参数绑定属性
    动态参数预期会求出一个字符串,异常情况下值为 null
    这个特殊的 null 值可以被显性地用于移除绑定。任何其它非字符串类型的值都将会触发一个警告。

<a v-bind:[attributeName]="url"> ... </a>
// data property attributeName,其值为 "href"
// 那么这个绑定将等价于 v-bind:href
<a v-on:[eventName]="doSomething"> ... </a>
// 当 eventName 的值为 "focus" 时
// 等价于 v-on:focus
<!--
在 DOM 中使用模板时这段代码会被转换为 `v-bind:[someattr]`。 (直接在一个 HTML 文件里撰写模板)
除非在实例中有一个名为“someattr”的 property,否则代码不会工作。
-->
<a v-bind:[someAttr]="value"> ... </a>
  • 绑定元素的类
// 传给v-bind:class一个对象, 也可以在data中定义对象
<div
  class="static"
  v-bind:class="{ active: isActive, 'text-danger': hasError }"
></div>
data: {
  isActive: true,
  hasError: false
}

计算属性

  • 缓存
    计算属性是基于它们的响应式依赖进行缓存的
// 只在相关响应式依赖发生改变时它们才会重新求值
// Date.now() 不是响应式依赖, 计算属性将不再更新
computed: {
  now: function () {
    return Date.now()
  }
}
  • setter
computed: {
  fullName: {
    get: function () {
      return this.firstName + ' ' + this.lastName
    },
    
    set: function (newValue) {
      var names = newValue.split(' ')
      this.firstName = names[0]
      this.lastName = names[names.length - 1]
    }
  }
}

key属性

// Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。
// 切换 loginType 将不会清除用户已经输入的内容, 仅仅是替换了它的 placeholder
<template v-if="loginType === 'username'">
  <label>Username</label>
  <input placeholder="Enter your username">
</template>
<template v-else>
  <label>Email</label>
  <input placeholder="Enter your email address">
</template>
// 添加一个具有唯一值的 key 属性
// 以示这两个元素是完全独立的,不要复用它们
<template v-if="loginType === 'username'">
  <label>Username</label>
  <input placeholder="Enter your username" key="username-input">
</template>
<template v-else>
  <label>Email</label>
  <input placeholder="Enter your email address" key="email-input">
</template>

条件渲染

v-show 不支持 <template> 元素,也不支持 v-else

v-if 有更高的切换开销,而 v-show 有更高的初始渲染开销。

列表渲染

  • 数组更新: 包裹(变异方法)能够触发视图的更新
    push()/ pop()/shift()/unshift()/splice()/sort()/reverse()

  • 对象更新:
    this.$set(this.obj, 'newProp', 'New Value');
    this.obj = { ...this.obj, newProp: 'New Value' };

  • 数组替换: 不会变更原始数组,而总是返回一个新数组
    filter()concat()slice()

example1.items = example1.items.filter(function (item) {
  return item.message.match(/Foo/)
})

事件处理

<div id="example-1">
  <button v-on:click="counter += 1">Add 1</button>
  <p>The button above has been clicked {{ counter }} times.</p>
</div>

表单输入绑定

修饰符:

  • .lazy: 在“change”时而非“input”时更新
    <input v-model.lazy="msg">
  • .number: 自动将用户的输入值转为数值类型
    <input v-model.number="age" type="number">
  • .trim: 自动过滤用户输入的首尾空白字符
    <input v-model.trim="msg">

标签:脚本,Vue,渲染,绑定,响应,API,Vue2,内联,data
From: https://www.cnblogs.com/khrushchefox/p/18660270

相关文章

  • Alice与Bob-整数分解问题脚本实现
    题目:密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解为两个素数,分解后,小的放前面,大的放后面,合成一个新的数字,进行md5的32位小......
  • 变异凯撒-python脚本调整ascii码转字符串
    题目:加密密文:afZ_r9VYfScOeO_UL^RWUc格式:flag{}结合题目变异凯撒,第一个字符a到f加了5,第二个字符f到l加了6,推断每个字符都在前一个字符基础上+1.编写python脚本:#定义字符串str="afZ_r9VYfScOeO_UL^RWUc"#定义偏移量k,初始值为5k=5#遍历字符串中的每个字符for......
  • vue2 基本使用
    1.模板2.computed和watch3.class和style4.条件5.循环6.事件7.表单 一、模板插值、表达式<template><div>p>文本插值{{message}}</p><p>js表达式{{flag:'yes':'no'}}(只能是表达式,不能是js语句)</p></di......
  • SQL Server数据库备份、差异备份、日志备份脚本.250108
    1,sp脚本USE[master]GO/******Object:StoredProcedure[dbo].[sp_BackupDatabase]ScriptDate:2025/1/810:43:05******/SETANSI_NULLSONGOSETQUOTED_IDENTIFIERONGO--Author:Amadeus--Createdate:2021-10-20execsp_BackupDatabaseL--Des......
  • 监控BASH脚本执行的命令的退出状态.250108
    解释代码:if[$?-eq0];then在Bash脚本中,$?是一个特殊的变量,它表示上一个执行的命令的退出状态。在Unix-like系统中,命令成功执行通常返回0,而非零的返回值通常表示命令执行失败或发生错误。if[$?-eq0];then这行代码的意思是:if:Bash中的条件语句关键字,用于开始......
  • zabbix5.0版本 (用脚本自定义监控项+监控MySQL状态信息)
    目录1.用脚本自定义监控项(1)编写脚本进行取值(2)修改zabbix客户端配置文件(3)zabbix创建模板及监控项(4)关联至被监控主机2.监控MySQl状态信息(1)使用脚本定义监控项(2)服务端创建MySQL监控模板(3)添加触发器(4)配置图形(5)关联至被监控主机(6)测试并查看数据3.自定义监控项以及监控......
  • 本地如何访问vue2 生成的dist代码
    前言当你使用VueCLI或其他构建工具构建Vue2项目时,它会生成一个dist文件夹,这个文件夹包含了你项目的生产环境版本的静态资源文件(HTML、JavaScript和CSS)。直接打开dist文件夹中的index.html文件在某些情况下是可以的,但是由于浏览器的安全限制,特别是当你的应用需要从......
  • IIS中快速更新网站后端文件的脚本
    如下::约定的文件夹:publish,backup/yyyyMMdd_HHmmss,updatefiles@echooffsetlocalenabledelayedexpansion::获取当前日期和时间for/f"tokens=1-8delims=/:."%%ain('wmicosgetlocaldatetime^|find"."')do(setDATETIME=%%a)::......
  • vue2项目升级为vue3,有哪些需要修改的?
    将Vue2项目升级为Vue3时,前端开发者需要关注多个方面的修改。以下是需要修改的关键点,按照一定结构进行归纳:1.全局和内部API的迁移全局API的更改:在Vue3中,许多全局API已经发生了改变。例如,Vue.use()被替换为app.use(),Vue.prototype被替换为app.config.globalProperties,而......
  • 基于SpringBoot的中国陕西民俗网的设计与实现(源码+SQL脚本+LW+部署讲解等)
    专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。主要内容:免费功能设计、开题报告、任务书、中......