Vue2_引入及基本功能

news/2025/1/23 0:43:59/文章来源:https://www.cnblogs.com/goicandoit/p/18687001

文档上说,Vue 是一套用于构建用户界面的渐进式框架

Vue 被设计为可以自底向上逐层应用

引入

这怎么体现呢,因为可以直接通过script方式引入

官方的最简单hello world的例子也是通过 script 引入的

<!DOCTYPE html>
<html>
<head><title>My first Vue app</title><script src="https://unpkg.com/vue@2"></script>
</head>
<body><div id="app">{{ message }}</div><script>var app = new Vue({el: '#app',data: {message: 'Hello Vue!'}})</script>
</body>
</html>

也可以直接创建 .html 文件,通过下面的方式引入

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

或者

<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue@2"></script>

核心功能

image-20250122113534665

声明式渲染

Vue.js 的核心是一个系统

  • 通过简洁的模板语法

Vue.js 使用简洁的模板语法,而 React 则是使用 JSX

它的模板语法接近普通 HTML,但加入了数据绑定指令

例如:使用 {{ }} 语法将数据绑定到页面中,使用 v-ifv-for 等指令来进行条件渲染和列表渲染

  • 声明式地

视图层框架通常分为声明式和命令式,像 jQuery 就是命令式框架,而 Vue 是声明式框架

不需要写代码来操作 DOM 元素(如 document.getElementByIdinnerHTML),只需要在模板中绑定数据(如 {{ message }}

Vue 会根据数据变化自动更新 DOM

  • 将数据渲染进 DOM

数据渲染到 DOM 是指通过 Vue 的数据绑定功能,将 JS 数据(如:变量、对象或数组)与 HTML 页面上的元素进行关联

当数据发生变化时,Vue 会自动更新与之相关联的 DOM 部分

文本插值

image-20250121153206878

如上图代码所示,数据和 DOM 已经建立关联了,是响应式的

注意,如果我们后面进行交互,比如修改 app.message,不再和 HTML 进行交互了

交互发生在新创建的 Vue 实例的内部,HTML 只是一个入口,我们的 Vue 实例其实是挂载在一个 DOM 元素上

这里是 #app

上面是文本插值,下面我们再来看看另一种方式

指令

通过这种方式来绑定元素 attribute(属性):

    <div id="app-2"><span v-bind:title="message">鼠标悬停几秒钟查看此处动态绑定的提示信息!</span></div>
        var app2 = new Vue({el: '#app-2',data: {message: '页面加载于 ' + new Date().toLocaleString()}})
image-20250121160708399

这里的 v-bind attribute 也就是指令

指令带有前缀 v-

表示是 Vue 提供的特殊 attribute

它们会在 DOM 上应用特殊的响应式行为

上面指令的意思是:将这个元素节点的 title attribute 和 Vue 实例的 message property 保持一致

可以在控制台中用命令修改:

image-20250121161504048

绑定了 title 的 attribute 的 HTML 更新了

image-20250122103755519

条件与循环

v-ifv-for 是不建议在一个 HTML 元素中同时使用的,Vue2 和 Vue3的优先级也不同,会增加心智负担

v-if

控制切换一个元素是否显示可以使用 v-if

<div id="app-3"><p v-if="seen">现在你看到我了</p>
</div>
var app3 = new Vue({el: '#app-3',data: {seen: true}
})

使用前

image-20250121164453662

使用后

image-20250121164515819

上面例子演示了我们不仅可以把数据绑定到 DOM 文本或 attribute

还可以绑定到 DOM 结构

此外,Vue 也提供一个强大的过渡效果系统,可以在 Vue 插入/更新/移除元素时自动应用过渡效果

过渡效果还挺有意思的

v-for

还有很多指令,例如:v-for指令可以绑定数组的数据来渲染一个项目列表

<div id="app-4"><ol><li v-for="todo in todos">{{ todo.text }}</li></ol>
</div>
var app4 = new Vue({el: '#app-4',data: {todos: [{ text: '学习 JavaScript' },{ text: '学习 Vue' },{ text: '整个牛项目' }]}
})

啪的一下就 push 进去了

image-20250121165658315

处理用户输入

v-on

为了让用户和我们的应用进行交互,我们需要添加一个事件监听器,使用的是 v-on 指令

通过该指令调用在 Vue 实例中定义的方法

上代码

<div id="app-5"><p>{{ message }}</p><button v-on:click="reverseMessage">反转消息</button>
</div>
var app5 = new Vue({el: '#app-5',data: {message: 'Hello Vue.js!'},methods: {reverseMessage: function () {this.message = this.message.split('').reverse().join('')}}
})
image-20250122110015009 image-20250122105946698

reverseMessage 方法中,我们更新了应用的状态,但没有触碰 DOM

所有的 DOM 操作都由 Vue 来处理,我们编码只需要专注于逻辑层即可,也就是编写声明式代码

v-model

Vue 还提供了 v-model 指令,它能轻松实现表单输入和应用状态之间的双向绑定

<div id="app-6"><p>{{ message }}</p><input v-model="message">
</div>
var app6 = new Vue({el: '#app-6',data: {message: 'Hello Vue!'}
})
image-20250122110146353 image-20250122105641815

组件化应用构建

组件系统是 Vue 的另一个重要概念

抽象的意思是把复杂的 UI 和逻辑简化成可管理、可操作的小块

它通过将复杂的应用分解为更小、更独立且通常可复用的部分(即组件),使得我们可以更高效地构建大型应用

几乎任意类型的应用界面都可以抽象为一个组件树:

img

在 Vue 里,一个组件本质上是 一个拥有预定义选项的 一个 Vue 实例

在 Vue 中注册组件很简单:

前面是组件名,后面放组件内容

// 定义名为 todo-item 的新组件
Vue.component('todo-item', {template: '<li>这是个待办项</li>'
})var app = new Vue(...)

可以用组件名的形式放入 HTML

<ol><!-- 创建一个 todo-item 组件的实例 --><todo-item></todo-item>
</ol>

但这样如果放多个 <todo-item></todo-item> 内容都一样的

显得 low 了

应该做到父作用域将数据传到子组件

下面我们修改组件定义,使它能够接受一个 prop

Vue.component('todo-item', {// todo-item 组件现在接受一个"prop",// 类似于一个自定义 attribute。// 这个 prop 名为 todo。props: ['todo'],template: '<li>{{ todo.text }}</li>'
})

可以使用 v-bind 指令将待办项传到循环输出的每个组件中

<div id="app-7"><ol><!--现在我们为每个 todo-item 提供 todo 对象todo 对象是变量,即其内容可以是动态的。我们也需要为每个组件提供一个“key”,稍后再作详细解释。--><todo-itemv-for="item in groceryList"v-bind:todo="item"v-bind:key="item.id"></todo-item></ol>
</div>

模板里面写了 todo 传入的内容,还给了 key 的内容

Vue.component('todo-item', {props: ['todo'],template: '<li>{{ todo.text }}</li>'
})var app7 = new Vue({el: '#app-7',data: {groceryList: [{ id: 0, text: '蔬菜' },{ id: 1, text: '奶酪' },{ id: 2, text: '随便其它什么人吃的东西' }]}
})
image-20250122225817677

出现了循环出来的三个组件

子单元通过 prop 接口与父单元进行了良好的解耦

父单元就是 #app-7,子单元是 todo-item

组件的应用模板可以长这个样子

<div id="app"><app-nav></app-nav><app-view><app-sidebar></app-sidebar><app-content></app-content></app-view>
</div>

Vue 组件也类似于自定义组件

不过 Vue 组件相比于普通的 HTML 自定义元素有一些优势和特性

  • 跨组件数据流
    • 父组件通过 props 将数据传递给子组件
    • 子组件通过 $emit 触发事件,通知父组件某些状态发生变化
    • Vue 提供状态管理工具(如 Vuex、Pinia),可以实现复杂的跨组件共享数据
  • 自定义事件通信
    • 组件可以通过 $emit 方法发送自定义事件,父组件可以通过 v-on@ 监听这些事件
  • 构建工具集成
    • 如:Webpack、Vite

小记

v-bind:绑定元素 attribute

v-on:添加一个事件监听器

END

本文介绍了,Vue 核心功能,或者说最基本的功能,包括声明式渲染、条件与循环、处理用户输入、组件化应用构建等,声明式渲染包括文本插值和指令两种方法;条件与循环主要是 v-if 和 v-for 这两个指令;处理用户输入涉及 v-on 和 v-model;组件化应用中指明一个组件本质上是一个拥有预定义选项的 Vue 实例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/873509.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

单纯形法原理

单纯形法的原理介绍及python实现代码单纯形法参考连接:单纯形法单纯形法是针对求解线性规划问题的一个算法,这个名称里的 “单纯形” 是代数拓扑里的一个概念,可以简单将“单纯形”理解为一个凸集,标准的线性规划问题(线性规划标准型)可以表示为: \[max\,(or\,min)\quad…

Tomcat 高并发之道原理拆解与性能调优

上帝视角拆解 Tomcat 架构设计,在了解整个组件设计思路之后。我们需要下凡深入了解每个组件的细节实现。从远到近,架构给人以宏观思维,细节展现饱满的美。 上回👉详情点我【Tomcat】Tomcat 架构原理解析到架构设计借鉴 站在上帝视角给大家拆解了 Tomcat 架构设计,分析 To…

Vue3 —— 安装及配置环境

Vue3的安装、配置(✿◕‿◕✿)Vue官网:https://vuejs.org/配置环境终端:Linux和Mac上可以用自带的终端。Windows上推荐用powershell或者cmd。Git Bash有些指令不兼容。安装Node.js:安装地址:https://nodejs.org/en/安装@vue/cli:执行:npm i -g @vue/cli如果执行后面的操作…

二. Redis 超详细的安装教程((七步)一步一步指导,步步附有截屏操作步骤)

二. Redis 超详细的安装教程((七步)一步一步指导,步步附有截屏操作步骤) @目录二. Redis 超详细的安装教程((七步)一步一步指导,步步附有截屏操作步骤)1. Redis 详细安装教程2. Redis 后台基本启动 & 详细的基本使用3. Redis 服务器的关闭和启动的注意事项4. 如何修改 Re…

数据分库分表和迁移方案

在我们业务快速发展的过程中,数据量必然也会迎来突飞猛涨。那么当我们的数据量百倍、千倍、万倍、亿倍增长后,原有的单表性能就不能满足我们日常的查询和写入了,此时数据架构就不得不进行拆分,比如单表拆分成10张表、100张表、单个月分多张表等等。下面我们针对具体案例分析…

Power BI 连接GaussDB提取数据方法

Power BI本身没有直接的链接器来获取GaussDB,目前连接GaussDB的方法有2个: ODBC, JDBC,这两种方式在云端都要通过设置网关,pbi云端通过网关链接到虚拟机或者某台电脑上,电脑安装个人网关(组织网关没有成功,不知道为什么,知道原因的希望能留言),下面说下两种连接方式: …

2025-1-20-盒子模型-弹性盒子模型

重新学一下巩固,之前发的看不了,本来还想着直接看呢 盒子模型 width,height是宽高,padding是内边距,如果里边有文本的话一般是贴着左上方,但是有内边距就不会,类似下边的演示图;border是内外之间边框,就是给宽高之外加一层;margin是外边距,可以理解为是你构造的边框…

【Ubuntu】安装OpenSSH启用远程连接

【Ubuntu】安装OpenSSH启用远程连接 零、安装软件 使用如下代码安装OpenSSH服务端: sudo apt install openssh-server壹、启动服务 使用如下代码启动OpenSSH服务端: sudo systemctl start ssh贰、配置SSH(可跳过) 配置文件 OpenSSH的配置文件所在位置:/etc/ssh/sshd_confi…

CTF-web第二步!

菜狗杯web的传说之下。打开F12,发现有个Game=new Underophidian(gameCanvas)表明有个Game变量存储着数据。在控制台输入Game获取,根据题意,修改分数,然后玩一下就可以得到flag了。

【CodeForces训练记录】Codeforces Round 1000 (Div. 2)

训练情况赛后反思 C题猜了个假结论WA4,每次选择度最多的删掉,在连续三个度都是最大的情况下,删中间的会寄 A题 有点前缀和的感觉,\([1,l]\) 互质个数为 \(l\),\([1,r]\) 互质个数为 \(r\),所以区间 \([l,r]\) 的个数就是 \(r-l\),特判一下 \(l=1,r=1\) 的情况答案是 \(1\…

GUIClip在IMGUI中的作用

目录简介IMGUIGUIClipPush Pop Count局部坐标StyleDraw中Rect点的位置鼠标位置绝对坐标ScrollOffset对局部坐标的影响局部坐标和绝对坐标的相互转化裁剪参考链接 简介 Unity中的IMGUI是一个独立于ugui的UI系统。IMGUI是事件(消息)驱动的UI系统,主要用于编写开发工具。 Unity官…

ceph-安装

【os】 ubuntu1804 【文心上找到的】 【步骤】一、环境准备‌配置节点名称‌:配置集群各节点的hostname,确保互相可以通过hostname来解析节点IP,不需要通过DNS。 ‌时间同步‌:确保所有节点的时间同步,以避免时间不一致导致的问题。 ‌关闭防火墙和SELinux‌:为了简化安装…