【5k字长文 | Vue学习笔记】#1 认识Vue对象和基础语法

news2024/11/15 21:39:29

Vue是一个非常流行的渐进式JavaScript框架,渐进式指的是自底向上,从小组件逐渐向上构成整个项目,渐进式还可以理解为:用什么就拿什么,每个组件只做自己的事,尽可能解耦合。

本节我们将学习简单的Vue实例,选用版本是Vue2(更加稳定且生态丰富)。

请确保在学习本内容前,你有一定的HTMLJavaScript基础(要理解JavaScript的对象的概念)。

在刚开始学习的时候,我们可以用在页面中引入Vue.js的方法来使用Vue,但是后续实际开发的时候还是要用Node.js来构建Vue项目。

Node.js:一个包管理工具,你可以理解为python中的pip或者anaconda,不过node.js是一种面向js的管理工具。

1.引入Vue.js

先创建一个HTML页面,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Title</title>
    <!--引入Vue2-->
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.0.0-rc.1/vue.min.js"></script>
</head>
<body>
    
</body>

<script>
//咱们自己的代码写在这里
</script>

</html>

2.创建Vue实例

Vue实例是Vue.js中最基本的单元,通过new Vue(构造参数)可以得到一个实例对象。

在后面,我们不再叫Vue对象,而是Vue实例,这更加准确,并且有助于与数据对象进行区分。

一般我们会用vm来命名一个Vue对象。(vm: ViewModel试图模型)

body里面添加一个div,并将其id设置为app,这个命名是自己定的,但是通常情况下都使用app

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

这里的{{msg}}是一种“显式调用”,这里将会把app对应的Vue实例中的data中的msg取出来放到这里,并实现数据的“双向绑定”。先不要管这些概念,有个大概了解就好。

Vue实例和一个DOM对象利用id进行绑定,并且这个绑定是双向的,意思是如果我们修改Vue实例中的数据,DOM中的也会改变,反之亦然。

然后我们在<script>中创建一个Vue实例,它可以包含一些属性,这些属性用一个对象包起来:

const vm = new Vue({
	el: "#app",//绑定到对应的dom上
	data: function()
	{
		return {
			msg : "Hello, World!"
		}
	}
})

注意看这里的data里面是一个函数,它返回一个对象,里面可以放一些数据(键值对)。

现在打开这个html,它就会显示一个"Hello, World!"字符串。

3.Vue实例的常用属性

  • el:表示Vue实例将要挂载到的元素。它可以是一个CSS选择器字符串,也可以是一个DOM元素。当Vue实例被创建时,它会自动将自己挂载到这个元素上。
  • data:表示Vue实例的数据对象。它可以包含各种数据属性,用于存储和管理Vue实例的状态。这些数据属性可以在模板中被访问和展示。它的值是一个函数,这个函数返回一个数据对象。
  • methods:表示Vue实例的方法。这些方法可以在模板和Vue实例内部通过this访问。注意这个不能使用() => 的形式来写,因为这样是不能用this的

4.给实例加一些方法

我们来实现这样一个功能:点击按钮,让页面上的元素值+1或-1。

先写下HTML:

<div id="app">
    <h1>{{msg}}{{cnt}}</h1>
    <button>ADD</button>
    <button>SUB</button>
</div>

我们的业务逻辑如何设计呢?原理就是在Vue实例的methods属性中添加两个函数用于修改cnt的值,然后将它们分别绑定到两个按钮的点击事件上即可。

写一个Vue实例,通过el属性绑定到#app这个DOM上面。

const vm = new Vue({
	el: "#app",//绑定到对应的dom元素上
	data: function()
	{
		return {
            msg: "Count : ",
            cnt: 0
		}
	},
    methods:
    {
        add()
        {
            this.cnt ++//注意这里一定要写this否则会出错
        },
        sub()
        {
            this.cnt --
        }
    }
})

接下来将这两个函数绑定到按钮事件上,可以使用v-on:click或者@click属性来设置(但是@click是Vue3.x的语法糖,我也不知道为啥在Vue2.x可以用,很神秘):

<div id="app">
    <h1>{{msg}}{{cnt}}</h1>
    <button v-on:click="add">ADD</button>
    <button @click="sub">SUB</button>
</div>

以下是一些常见的监听器(不用谢我,点个赞不过分叭):

  • v-on:mouseover:鼠标移动到元素上时触发的事件监听器。
  • v-on:mouseout:鼠标从元素上移开时触发的事件监听器。
  • v-on:mousemove:鼠标在元素上移动时触发的事件监听器。
  • v-on:keydown:按下键盘按键时触发的事件监听器,,只有在获得焦点时有效。
  • v-on:keyup:释放键盘按键时触发的事件监听器,只有在获得焦点时有效。
  • v-on:focus:元素获得焦点时触发的事件监听器。
  • v-on:blur:元素失去焦点时触发的事件监听器。
  • v-on:change:元素值发生变化时触发的事件监听器,一般配合输入框使用。
  • v-on:submit:表单提交时触发的事件监听器。
  • v-on:click:鼠标点击元素时触发的事件监听器。

5.条件与循环

Vue中,可以在HTML中使用v-if属性来设置条件,使用v-for来设置循环。

<div id="app">
	<li v-for="item in items">
    	姓名:{{item.name}}
    	大学:{{item.university}} 
    	网址:<a v-bind:href="item.url">{{item.url}}</a>
    </li>
</div>

我们可以看到HTML中仅需写一个li,就可以实现循环生成多个li的功能。

我们写的Vue实例如下:

const vm = new Vue({
	el: "#app",//绑定DOM元素,注意一定要写#
    data: function()
    {
    	return {
        	msg: "Hello",//这个可以不写
            items:[
            	{name: "张三", university: "武汉理工大学", url: "https://www.baidu.com"},
            	{name: "李四", university: "武汉原神大学", url:"https://www.yuanshen.com"},
                {name: "李四2号", university: "湖北原神大学", url:"https://www.yuanshen.com"},
                {name: "王五", university: "武汉冰红茶大学", url:"https://www.binghongcha.com"},
            ]
        }
    },
})

结果如图:

并且我们可以再加一个v-if属性,来筛选大学中带有"武汉"的对象。

<div id="app">
	<li v-for="item in items" v-if="item.university.indexOf('武汉') != -1">
    	姓名:{{item.name}}
    	大学:{{item.university}} 
    	网址:<a v-bind:href="item.url">{{item.url}}</a>
    </li>
</div>

结果如下:

Vue中,可以使用javascript语句:[可迭代数据对象名].push({数据对象})来新增一个数据。

6.处理用户输入

在前面的例子中我们尝试了使用按钮来进行交互,现在我们来看下Vue如何处理用户的输入框。

我们来实现一个input输入框:输入什么,页面上就显示什么,实时更新。

这里我们需要用到v-model属性来将input输入框和message变量来绑定。

<div id="app">
	<p>Message is: {{message}}</p>
    <input v-model="message" placeholder="edit me">
</div>

Vue实例如下:

const vm = new Vue({
	el: "#app",
    data: function()
    {
    	return {
        	message: ""
        }
    },
})

效果如下:

v-model 指令在表单 <input>,<textarea>,<select> 元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。

7.写在最后

本文仅作一个Vue的入门学习,没有具体全面的逐个学习组件,而是挑选一些简单有趣的例子进行实现。

我自己也还在学习中,希望一起进步!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

渗透测试高级技巧(一):分析验签与前端加密

“开局一个登录框” 在黑盒的安全测试的工作开始的时候&#xff0c;打开网站一般来说可能仅仅是一个登录框&#xff1b;很多时候这种系统往往都是自研或者一些业务公司专门研发。最基础的情况下&#xff0c;我们会尝试使用 SQL 注入绕过或者爆破之类的常规手段&#xff0c;如果…

【文末送书】十大排序算法C++代码实现

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

数独·12中解法·anroid 数独小游戏·休闲益智小游戏

标题数独12中解法anroid 数独小游戏休闲益智小游戏&#xff08;继续更新中……&#xff09; 一款经典数独训练app 资源下载 &#xff08;0积分&#xff09;https://download.csdn.net/download/qq_38355313/88544810 —— —— 数独&#xff08;sh d&#xff09;是源自18世纪…

Find My音箱|苹果Find My技术与音箱结合,智能防丢,全球定位

音箱市场规模正在不断扩大。随着人们生活品质的提高&#xff0c;对音乐体验的需求也在不断升级。消费者对于蓝牙音箱的需求&#xff0c;已经从单纯的音质扩展到了功能、设计和价格等多个方面。随着移动化、即时化的视听娱乐需求的增长&#xff0c;蓝牙音箱性能、质量、外观设计…

定时器的使用

目录 前言 正文 1.方法 schedule(TimerTask task, Date time) 的测试 &#xff08;1&#xff09;执行任务的时间晚于当前时间(在未来执行)的效果 &#xff08;2&#xff09;线程TimerThread不销毁的原因 &#xff08;3&#xff09;使用 public void cancel() 方法实现 T…

Java 下载地址

1 地址&#xff1a; Java Downloads | Oracle 2 往下翻(Java 8 和 Java 11) 3 往下翻 (JRE 下载)(JRE 8 为例) 4 跳转到登录(登录账号才可以下载)

Flink Operator 使用指南 之 Flink Operator安装

介绍 Flink Kubernetes Operator 充当控制平面来管理 Apache Flink 应用程序的完整部署生命周期。尽管 Flink 的Native Kubernetes 集成已经允许用户在运行的 Kubernetes(k8s) 集群上直接部署 Flink 应用程序,但自定义资源和Operator Pattern 也已成为 Kubernetes 原生部署体…

跑步耳机哪个牌子好?这五款跑步耳机闭眼入也不会错!

作为一个经常跑步运动的人&#xff0c;总感觉运动能够让人暂时远离城市的喧嚣&#xff0c;同时运动也是一种特别好的舒压方法。但跑步的时候如果没有音乐助燃&#xff0c;那是没有灵魂的&#xff0c;这也许就是现代年轻人的矫情吧&#xff0c;我在运动的时候经常会佩戴骨传导耳…

渗透测试高级技巧(二):对抗前端动态密钥与非对称加密防护

在前文的技术分享中&#xff0c;我们描述了验签和静态对称加密&#xff08;静态密钥 AES&#xff09;的常见场景&#xff0c;大家我相信遇到类似的加解密清醒&#xff0c;基本都可以通过热加载的基本使用获得破解前端加密解密的方法&#xff0c;达到一个比较好的测试状态。 在…

无法创建 8192 MB 的匿名分页文件: 系统资源不足,无法完成请求的服务。

好久没用VMware Workstation&#xff0c;今天突然要用&#xff0c;发现所有的虚机在启动的时候提示都提示&#xff1a; 无法创建 XXXX MB 的匿名分页文件&#xff1a;页面文件太小&#xff0c;无法完成操作。 未能分配主内存。 模块"MainMem"启动失败。 未能启动…

[计算机网络实验]头歌 实验二 以太网帧、IP报文分析

目录 第1关&#xff1a;Wireshark基本使用入门 【实验目的】 【实验环境】 【本地主机、平台虚拟机之间数据传递】 wireshark基本用法】 1、wireshark主界面 2、抓取分组操作 3、Wireshark窗口功能 4、筛选分组操作 【实验操作】 ​编辑 第2关&#xff1a;Ethernet帧…

排序算法--冒泡排序

实现逻辑 ① 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。 ②对每一对相邻元素作同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最大的数。 ③针对所有的元素重复以上的步骤&#xff0c;除了最后一个。 ④…

怎么判断list是否为null

List<Entity> baseMess new ArrayList<>(); baseMess motiveService.getBaseMessage(machine.get(i),preDate,nowDate); System.out.println("获取Size"baseMess.size()); baseMess.removeIf(Objects::isNull); System.out.println("获取Size"…

NV080D语音芯片:让智能快递柜取件更便利

随着互联网的普及和电子商务的迅速发展&#xff0c;网购消费已经成为了越来越多人的选择。这也催生了一个庞大的“网购一族”&#xff0c;他们购买的各种商品会通过快递公司送到家门口。然而&#xff0c;收取快递往往也伴随着一系列问题。比如&#xff0c;派送时间和收件人取件…

使用Echarts.js绘制中国地图

使用Echarts.js绘制中国地图 一、页面效果 二、功能描述 ​ 1、展示中国所有省份&#xff0c;包括南海诸岛&#xff0c;确保领土完整&#xff0c;中国领土神圣且不可侵犯。 ​ 2、每个省份根据对应数据的不同渲染不同的颜色&#xff0c;根据数据从小到大&#xff0c;对应底部…

maven pom引入依赖不报红,但是项目Dependencies中没有引入jar包

前言 小编我将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识&#xff0c;有兴趣的小伙伴可以关注一下&#xff01; 也许一个人独行&#xff0c;可以走的很快&#xff0c;但是一群人结伴而行&#xff0c;才能走的更远&#xff01;让我们在成长的道路上互相学习&…

ROS2对比ROS1的一些变化与优势(全新安装ROS2以及编译错误处理)《1》

1、概述 我们在前面介绍的ROS&#xff0c;都是ROS1的版本&#xff0c;近期对机器狗进行学习的时候&#xff0c;发现版本是ROS2了&#xff0c;也发现平时习惯的一些命令都有了变化&#xff0c;改变还是挺大的&#xff0c;不过熟悉之后还是很习惯ROS2的写法。 ROS2不是在ROS1的基…

基于SSM的公司仓库管理系统(有报告)。Javaee项目

演示视频&#xff1a; 基于SSM的公司仓库管理系统&#xff08;有报告&#xff09;。Javaee项目 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMvc …

Sulfo-CY5 DBCO的荧光特点、激发发射-星戈瑞

**Sulfo-CY5 DBCO是一种近红外荧光标记探针&#xff0c;具有以下荧光特点&#xff1a; 激发波长&#xff1a;**Sulfo-CY5 DBCO的激发波长位于近红外区域&#xff0c;通常在650-670纳米之间。近红外光在生物体内具有较好的组织穿透性&#xff0c;能够减少组织自发荧光的干扰&…