Vue基础语法【上】

news2024/11/25 21:35:33

目录

前言

一、插值

1.文本插值

2.html解析

3.属性

4.表达式

5.截取

6.三元运算符

二、指令

1.v-if

2.v-for

3.v-bind

4.v-on

5.v-if|v-else|v-else-if

6.自定义指令

三、过滤器

1.局部过滤

2.全局过滤

四、计算属性与监听属性

1.计算属性

2.监听属性

五、购物车案例


前言

Vue.js是一种用于构建用户界面的渐进式JavaScript框架。它的核心思想是将数据和视图进行分离,通过数据驱动视图的方式来构建交互式的Web应用程序。在本篇博文中,我们将介绍Vue的基础语法,帮助你快速入门Vue开发。

一、插值

1.文本插值

使用双大括号{{}}将数据插入到文本中

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

<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return{
						msg:"hello meinv"
					
					}
				}
			})
		</script>
当msg变量的值发生变化时,DOM中的文本内容也会相应地更新。

2.html解析

如果要输出html格式的数据,需要使用v-html指令。

<h1>html解析</h1>
			<b v-html="msg2"></b> 

3.属性

<h1>属性</h1>
			<b :class="msg3" v-html="msg2"></b> <br>

4.表达式

<h1>表达式</h1>
			{{num+100}} <br>

5.截取

<h1>截取</h1>
			<h1>{{hh.substr(4,3)}}<br></h1>

6.三元运算符

<h1>三元运算判断</h1>
			<input v-model="ly"/>
			{{ly==1?"萝莉":"御姐"}}

综合案例演示

<!DOCTYPE html>
<html>
	 <head>
		<meta charset="utf-8">
		<title>插值</title>
		<!-- 导入工具 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		
		<style type="text/css">
			.f30{
				font-size: 30px;
                color:green
			}
		</style>
	</head>
	<body>
		<!-- 定义边界 -->
		<div id="app">
			<h1>文本</h1>
			{{msg}}  <br>
			
			<h1>html解析</h1>
			<b v-html="msg2"></b> <br>
			
			<h1>属性</h1>
			<b :class="msg3" v-html="msg2"></b> <br>
			
			<h1>表达式</h1>
			{{num+100}} <br>
			
				<h1>截取</h1>
			<h1>{{hh.substr(4,3)}}<br></h1>
			
			<h1>三元运算判断</h1>
			<input v-model="ly"/>
			{{ly==1?"萝莉":"御姐"}}
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return{
						msg:"hello meinv",
						msg2:"<span style='color: blue'> 卡拉米</span>",
						msg3:"f30",
						num:100,
						hh:"无敌旋风美男子再次",
						ly:1
					}
				}
			})
		</script>
		
		
	</body>
</html>

二、指令

指令是 Vue.js 中的一种特殊属性,以 v- 开头,后面跟着指令的名称。指令可以用在 HTML 元素上,用于绑定数据、事件等。Vue 内置了很多常用的指令,如 v-ifv-forv-bind 等,你也可以自定义指令来实现特定的功能。

1.v-if

v-if 指令用于条件渲染,根据表达式的值决定是否渲染一个元素。当表达式的值为真时,元素会被渲染;否则,元素不会被渲染。

<div v-if="show">Hello, Vue!</div>

2.v-for

v-for 指令用于循环渲染,可以遍历数组或对象的属性。

  遍历数组: v-for="item in items", items是数组,item为数组中的数组元素

    遍历对象: v-for="(value,key,index) in stu", value属性值,key属性名,index下标

<div v-for="(item, index) in items" :key="index">
  {{ item }}
</div>

3.v-bind

v-bind 指令用于绑定属性,可以将数据绑定到元素的属性上。

<img v-bind:src="imageSrc" />

4.v-on

v-on 指令用于绑定事件监听器,可以在元素上监听指定的事件。

<button v-on:click="handleClick">点击我</button>

5.v-if|v-else|v-else-if

根据其后表达式的bool值进行判断是否渲染该元素,他们只能是兄弟元素

 v-else-if上一个兄弟元素必须是v-if, v-else上一个兄弟元素必须是v-if或者是v-else-if

<p>v-if/v-else-if/v-else的使用</p>
			<input v-model="score"/><br>
			<b v-if="score < 60">该死</b>
			<b v-else-if="score >=60 && score <70 ">及格</b>
			<b v-else-if="score >=70 && score <80">不错</b>
			<b v-else-if="score >=80 && score <90">good</b>
			<b v-else="">666</b><br >

案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>指令</title>
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		
	</head>
	<body>
		
		<!-- 定义边界 -->
		<div id="app">
			<h1>v-if/v-else-if/v-else的使用</h1>
			<input v-model="score"/><br>
			<b v-if="score < 60">该死</b>
			<b v-else-if="score >=60 && score <70 ">及格</b>
			<b v-else-if="score >=70 && score <80">还不错</b>
			<b v-else-if="score >=80 && score <90">good</b>
			<b v-else="">666</b><br >
		
		<h1>v-if 与v-show的区别</h1>
		<b v-if="isShow">我是v-if</b>
		<b v-show="isShow">我是v-show</b>
		
		
		<h1>v-for的使用</h1>
		<i v-for="u in users ">{{u}}&nbsp;</i>
		
		<h1>下拉框的使用</h1>
		<select>
			<option v-for=" u in users" :value="u.id">
				{{u.name}}
			</option>
		</select>
		
			<h1>复选框的使用</h1>
		<div v-for="u in users"  >
		<input type="checkbox" name="users" :value="u.id"/>{{u.name}}
		</div>
		
		
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return{
						score:99,
						isShow:false,
						users:[{
							name:"死仔",id:1
						},{
							name:"你在哪",id:2
						},{
							name:"四季花",id:3
						}]
					}
				}
			})
		</script>
		
	</body>
</html>

 

6.参数

          一些指令能够接收一个“参数”,在指令名称之后以冒号表示

<a v-bind:href="url">...</a>

动态参数

          从2.6.0开始,可以用方括号括起来的JavaScript表达式作为一个指令的参数

  <a v-bind:[attrname]="url"> ... </a>

案例:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>参数</title>
		<!-- 导入工具 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		
	</head>
	<body>
		
		<!-- 定义边界 -->
		<div id="app">
			<h1>动态参数</h1>
			<input v-model="evname"/>
			<!-- 单击 -->
			<!-- <button @click="test">点我</button> -->
			<!-- 双击 -->
			<button v-on:[evname]="test">点我</button>
		</div>
		
		<script type="text/javascript">
			new Vue({
				el:"#app",
				data(){
					return{
						evname:"click"
					}
				},
				methods:{
					test(){
						alert("快点我,快快");
					}
					}
			});
		</script>
		
	</body>
</html>

6.自定义指令

除了内置指令外,你还可以根据需求自定义指令。自定义指令的方法如下:

1.使用 Vue.directive() 方法注册一个新的全局指令:

Vue.directive('focus', {
  // bind 钩子函数
  bind: function (el) {
    // 聚焦元素的逻辑(如设置 tabIndex)
    el.focus();
  },
});
2.在组件中使用自定义指令:
<!-- 使用 v-focus 指令 -->
<input v-focus />

三、过滤器

过滤器是 Vue.js 中的一种特殊属性,以 v- 开头,后面跟着过滤器的名称。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式。过滤器的作用是对数据进行处理,然后返回处理后的结果。Vue 内置了很多常用的过滤器,如 datelowercaseuppercase 等,你也可以自定义过滤器来实现特定的功能。

1.局部过滤

<h1>局部过滤器基本应用</h1>
		{{msg | filterA}}
		
		<h1>局部过滤器串行使用--交并集</h1>
		{{msg}}<br>
	    {{msg | filterA}}<br>
		 {{msg | filterA|filterB}}<br>
		 
		 <h1>局部过滤器传参</h1>
		 {{msg | filterC(2,6)}}

2.全局过滤

<h1>全局过滤</h1>
		<h1> {{time}}<br /></h1><hr >
		<h1> {{time|fmtDataFilter}}</h1>

完整案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>过滤器</title>
		<!-- 导入工具 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
		<script src="date.js" type="text/javascript" charset="utf-8"></script>
	</head>
	<body>
		
		<!-- 定义边界 -->
		<div id="contect">
		<!-- <h1>局部过滤器基本应用</h1>
		{{msg | filterA}}
		
		<h1>局部过滤器串行使用--交并集</h1>
		{{msg}}<br>
	    {{msg | filterA}}<br>
		 {{msg | filterA|filterB}}<br>
		 
		 <h1>局部过滤器传参</h1>
		 {{msg | filterC(3,6)}} -->
		<h1>全局过滤</h1>
		<h1> {{time}}<br /></h1><hr >
		<h1> {{time|fmtDataFilter}}</h1>
		 
		</div>
		
		<script type="text/javascript">
			Vue.filter('fmtDataFilter',function(value){
				return fmtDate(value);
			});
			new Vue({
				el:"#contect",
				filters:{
					'filterA':function(msg){
						return msg.substring(2,4);
					},
					'filterB':function(msg){
						return msg.substring(2,4);
					},
					'filterC':function(msg,begin,end){
						return msg.substring(begin,end);
					}
				},
				data(){
					return{
						msg:"局部过滤器",
						time:new Date()
					
					}
				}
			})
		</script>
		
	</body>
</html>

四、计算属性与监听属性

1.计算属性

<h1>计算属性:</h1>
			单价:<input v-model="price"/>
			数量:<input v-model="num"/>
			小计:{{count}}<br />

2.监听属性

监听属性:<br />
			千米:<input v-model="km" /><br />
			米:<input v-model="m"/>

案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>计算属性和监听属性</title>
		<!-- 导入工具 -->
		<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.js"></script>
		<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.10/vue.js"></script>
	</head>
	<body>
		
		<!-- 定义边界 -->
		<div id="contect">
			<h1>计算属性:</h1>
			单价:<input v-model="price"/>
			数量:<input v-model="num"/>
			小计:{{count}}<br />
			
			监听属性:<br />
			千米:<input v-model="km" /><br />
			米:<input v-model="m"/>
		</div>
		
		<script type="text/javascript">
			
			new Vue({
				el:"#contect",
				data(){
					return{
						price:199,
						num:1,
						m:1000,
						km:1
					};
				},
				computed:{//计算属性
					count:function(){
						return this.price * this.num
					}
				},
				watch:{//监听属性
					km:function(kmm){  
						this.m=parseInt(kmm)*1000
					},
					m:function(kmm){  
						this.km=parseInt(kmm)/1000
					}
				}
			})
		</script>
		
	</body>
</html>

五、购物车案例

先看效果

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <title>cart</title>
	<style type="text/css">
		table {
		    border: 1px solid #e9e9e9;
		    border-collapse: collapse;
		    border-spacing: 0;
		}
		th, td {
		    padding: 8px 16px;
		    border: 1px solid #e9e9e9;
		    text-align: left;
		}
		th {
		    background-color: #f7f7f7;
		    color: #5c6b77;
		    font-weight: 600;
		}
		img {
		    width: 50px;
		    height: 50px;
		}
	</style>
</head>

<body>
    <div id="app">
        <div v-if="barbecue.length">
            <!--如果页面有数据存在,则显示,无则。。-->
            <table>
                <thead>
                    <tr>
                        <th></th>
                        <th>美女五折限购</th>
                        <th>服务</th>
                        <th>价格</th>
                        <th>个数</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                    <tr v-for="(item, index) in barbecue">
                        <td>{{item.id}}</td>
                        <td>
                            <img :src="item.image" alt="">
                            {{item.name}}
                        </td>
                        <td>
                            <select>
                                <option v-for="fuwu in softmeinv">
                                    {{fuwu}}
                                </option>
                            </select>
                        </td>
                        <td>{{item.price | showPrice}}</td>
                        <td>
                            <button @click="decrement(index)" :disabled="item.count <= 1">-</button>
                            <input type="number" v-model.number="item.count" @change="updateItem(index)" />
                            <button @click="increment(index)">+</button>
                        </td>
                        <td><button @click="removeHandle(index)">移除</button></td>
                    </tr>
                </tbody>
            </table>
            <h2>总价格:{{totalPrice | showPrice}}</h2>
        </div>
        <h2 v-else>购物车为空!</h2>
    </div>

    <script type="text/javascript">
    	const app = new Vue({
    	    el: "#app",
    	    data() {
    	        return {
    	            barbecue: [
    	                {
    	                    name: '美国美女',
    	                    id: 1,
    	                    image: 'image/1.jpg',
    	                    price: 10,
    	                    count: 1
							
    	                },
    	                {
    	                    name: '日本美女',
    	                    id: 2,
    	                    image: 'image/2.jpg',
    	                    price: 15,
    	                    count: 1
							
    	                },
    	                {
    	                    name: '中国美女',
    	                    id: 3,
    	                    image: 'image/3.jpeg',
    	                    price: 3,
    	                    count: 1
							
    	                },
    	                {
    	                    name: '韩国美女',
    	                    id: 4,
    	                    image: 'image/4.jpg',
    	                    price: 13,
    	                    count: 1
							
    	                },
    	            ],
    	            softmeinv: ['健身丸', '403房', '逛街', '牵手', 'kiss kiss', '抱抱', '旅游','游乐场','大草原']
    	
    	        }
    	    },
    	    methods: {
    	        decrement(index) {
    	            this.barbecue[index].count--
    	        },
    	        increment(index) {
    	            this.barbecue[index].count++
    	        },
    	        removeHandle(index) {
    	            this.barbecue.splice(index, 1)//移除对应的下标行
    	        }
    	    },
    	    filters: {
    	        showPrice(price) {
    	            return '¥' + price.toFixed(2)
    	        }
    	    },
    	    computed: {
    	        totalPrice() {
    	           // 一般遍历写法
    	            let totalPrice = 0
    	            for (let i = 0; i < this.barbecue.length; i++) {
    	                totalPrice += this.barbecue[i].price * this.barbecue[i].count
    	            }
    	            return totalPrice
    	        
    	            // //2.for in 写法
    	            // let totalPrice = 0
    	            // for (let i in this.barbecue) {
    	            //     totalPrice += this.barbecue[i].price * this.barbecue[i].count
    	            // }
    	            // return totalPrice
    	            
    	            // //3.for of 写法
    	            // let totalPrice = 0
    	            // for (let item of this.barbecue) {
    	            //     totalPrice += item.price * item.count
    	            // }
    	            // return totalPrice
    	
    	        }
    	    },
    	});

    </script>
</body>

</html>

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

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

相关文章

【计算机毕业设计】基于协同过滤算法的体育商品推荐系统的设计与实现、SpringBoot+Vue

博主主页&#xff1a;一季春秋博主简介&#xff1a;专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发&#xff0c;远程调试部署、代码讲解、文档指导、ppt制作等技术指导。主要内容&#xff1a;毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题…

【Java】第一个Servlet程序

第一个Servlet程序 创建项目引入依赖手动创建必要的目录/文件编写代码打包程序部署验证程序是否正常工作 创建项目 选中maven 创建好项目后,观察左侧项目结构 引入依赖 当权代码需要使用servlet开发,而Java标准库中并没有servlet,此时就需要让maven能够把servlet的依赖获取…

启动YOLO进行图片物体识别

查看官方文档YOLO: Real-Time Object Detection 这些是一些模型的对比&#xff0c;显示了YOLO的优势&#xff0c;继续往下面看 CoCoData set 是一个数据库&#xff0c;用来训练模型&#xff0c;这里面有丰富的物体检测&#xff0c;分割数据集&#xff0c;图像经过了精确的segm…

大数定理:期望损失与经验损失的依据

在随机事件的大量重复出现中&#xff0c;往往呈现几乎必然的规律&#xff0c;这个规律就是大数定律。通俗地说&#xff0c;这个定理就是&#xff0c;在试验不变的条件下&#xff0c;重复试验多次&#xff0c;随机事件的频率近似于它的概率。偶然中包含着某种必然。 大数定律(l…

为实验室运维提供安全、智能、节能整体解决方案的易云维®实验室智能化管理平台

实验室安全问题频繁发生&#xff0c;在对生命损失表示遗憾的同时&#xff0c;再次提醒科研人员&#xff0c;实验室安全不容忽视。为了保证实验室工作环境的安全&#xff0c;易云维自主研发了实验室智能化管理平台&#xff0c;其中安防管理功能对确保实验室安全具有重大意义。 实…

关于浏览器的周边知识 01(副本)

先说两个概念&#xff0c;互联网 internet 泛指具有互通的计算机网络&#xff1b;因特网 Internet 是基于TCP/IP 协议族的最大的计算机网络&#xff1b;万维网 web (word wide web) 是基于互联网&#xff0c;由超链接和统一资源标识符&#xff08;连接&#xff09;的文件和其他…

GE WES13-3控制主板模块

GE WES13-3 控制主板模块通常是工业自动化和控制系统中的关键组件&#xff0c;用于控制和监测各种设备和过程。以下是可能包括在该模块中的一些产品功能&#xff1a; 控制处理器&#xff1a;WES13-3 控制主板模块通常配备控制处理器&#xff0c;用于执行控制逻辑和算法&#xf…

如何打造可视化警务巡防通信解决方案

近年来&#xff0c;科学技术飞速发展&#xff0c;给予了犯罪分子可乘之机。当面临专业化的犯罪分子、高科技的犯罪手段&#xff0c;传统警务模式似乎不能满足警方打击犯罪的需要&#xff0c;因此当今公安工作迫切需要构建智能化、系统化、信息化的警务通信管理模式。 警务人员…

Hi Mainnet 2023,Moonbeam来啦!

Messari一年一度Mainnet大会今年回归&#xff01;9月20日-23日&#xff0c;来自加密业界专家们满满三天的演讲干货、社交机会、专题工作坊将给予参会者独一无二的体验。 在参与了9月初韩国区块链周、月中Token2049之后&#xff0c;本周Moonbeam Network也将马不停蹄地参加此次…

文字转语音真人发声怎么弄?3款亲测好用的智能配音软件

现在AI人工智能语音技术已经比较发达了&#xff0c;可能很多朋友会发现影视解说经常遇到耳熟的声音&#xff0c;其实就是AI配音效果&#xff0c;才会这么相似。 今天就给大家分享3个好用的AI配音工具&#xff0c;希望对你有所帮助&#xff01; 一、&#xff1a;悦音配音 悦音…

Android 中手指从按钮 A 平移到 B,会发生什么?为什么?

作者&#xff1a;TechMerger 前言 Touch 相关问题是 Android 面试中常问的点&#xff0c;不一定要求大家都从 InputFlinger 底层开始回答&#xff0c;但起码需要了解 Touch 抵达 App 之后的完整处理。而即便是这段偏上层的链路&#xff0c;也不要局限在老生常谈的过程复述&…

【Linux旅行记】探究操作系统是如何进行管理的!

文章目录 什么是操作系统&#xff1f;操作系统概念操作系统的目的底层硬件驱动程序操作系统理解系统调用接口 操作系统是如何进行管理的&#xff1f;什么是管理&#xff1f;操作系统是如何管理硬件信息呢&#xff1f; &#x1f340;小结&#x1f340; &#x1f389;博客主页&am…

权威认可!麒麟信安实力入选中国信通院 2023《高质量数字化转型产品及服务全景图》

日前&#xff0c;中国信息通信研究院&#xff08;简称“中国信通院”&#xff09;发布2023《高质量数字化转型产品及服务全景图&#xff08;8月份新增入图产品&#xff09;》&#xff0c;麒麟信安实力入选&#xff0c;成为云服务领域的标杆企业。 麒麟信安入选2023 《高质量数字…

激光焊如何更准更稳?维视智造激光焊视觉解决方案助力精密制造

激光焊接是一种高能密度、非接触的焊接技术&#xff0c;它利用激光束对工件进行加热和熔化&#xff0c;然后使其在熔池的情况下形成连接。与传统的焊接方法相比&#xff0c;激光焊具有高密度、熔深小、变形小、焊缝质量高、适用性广、自动化程度高等特点&#xff0c;可以实现焊…

【C语言】自定义类型:结构体【结构体内存具详细】,枚举,联合

目录 一、结构体 1.结构的声明 2.特殊的声明 3.结构的自引用 4.结构体变量的定义和初始化 5.结构体内存对齐&#xff08;重点来了&#xff09; 6.为什么会存在内存对齐 7.修改默认对齐数 8.结构体传参 二、位段 1.什么是位段 2.位段的内存分配 3.位段的跨平台问题…

各种存储性能瓶颈如何分析与优化?

【摘要】本文结合实践剖析存储系统的架构及运行原理&#xff0c;深入分析各种存储性能瓶颈场景&#xff0c;并提出相应的性能优化手段&#xff0c;希望对同行有一定的借鉴和参考价值。 【作者】陈萍春&#xff0c;现就职于保险行业&#xff0c;拥有多年的系统、存储以及数据备…

vue3+TS前端JS实现 搜索关键词变红

起初在网上搜索获得的处理方式大都是类似这种&#xff1a; 但是实际使用中发现&#xff0c;对于汉字和数字是没有问题的&#xff0c;但是如果有字母就会出现问题。 1.只有汉字和数字的时候&#xff1a;匹配正常。 2.当有字母的时候&#xff1a;异常替换。 原因&#xff1a;第二…

百度SEO优化技巧(选择、网站结构、内容优化、外链建设、数据分析)

百度关键词SEO优化介绍 SEO是搜索引擎优化的缩写&#xff0c;是指通过优化网站结构、内容和外部链接等方式&#xff0c;提高网站在搜索引擎中的排名&#xff0c;从而获取更多的访问量和流量。百度是中国最大的搜索引擎之一&#xff0c;对于企业来说&#xff0c;优化百度关键词…

千呼万唤openGauss资源池化系列培训来了

应openGauss广大用户要求&#xff0c;社区于近期推出openGauss资源池化培训系列。 关于资源池化 资源池化是openGauss 5.0.0 推出的重点特性&#xff0c;是openGauss基于内存池化和共享存储实现的数据库集群。数据在集群的计算节点内存、共享存储中实现共享。应用可以任意节点…

嵌入式学习攻略

嵌入式软件编程的基础 主要是学习编程语言、开发环境和形成自己的编程逻辑&#xff0c;为嵌入式软件开发打下良好的基础&#xff0c;编程语言建议为C和C语言。书籍中的例子都是比较经典的程序实例&#xff0c;尽量去搞懂&#xff0c;不要觉得太长或者太难了而放弃&#xff0c;…