【vue3学习之路(一)】

文章目录

  • 前言
  • 一、vue3项目创建
    • 1.1环境准备
      • 1.1.1 基于 vue-cli 创建(脚手架创建)
      • 1.1.2 基于 vite 创建(推荐)
  • 二、熟悉流程
  • 总结


前言

参考视频:https://www.bilibili.com/video/BV1Za4y1r7KE?p=10&spm_id_from=pageDriver&vd_source=d4a415289ddc233b050862fba21c8157

一、vue3项目创建

方法一:基于vue-cli创建
方法二:基于vite创建(官网推荐),创建更快
vite官网地址:https://vitejs.cn
在这里插入图片描述
在这里插入图片描述

1.1环境准备

下载好node.js才有npm

1.1.1 基于 vue-cli 创建(脚手架创建)

点击查看官方文档

备注:目前vue-cli已处于维护模式,官方推荐基于 Vite 创建项目。
在powershell
查看@vue/cli版本,确保@vue/cli版本在4.5.0以上
vue --version
安装或者升级你的@vue/cli
npm install -g @vue/cli
执行创建命令
vue create vue_test
随后选择3.x
Choose a version of Vue.js that you want to start the project with (Use arrow keys)
》3.x 直接回车
2.x
在这里插入图片描述
启动
cd vue_test
npm run serve

1.1.2 基于 vite 创建(推荐)

官网地址:https://vitejs.cn
https://cn.vuejs.org/guide/quick-start.html#creating-a-vue-application
注意node版本要在18以上。在需要创建的位置cmd

//	 创建工程
npm init vite@latest
//	输入项目名称
vite-vue3
//	 选择vue和TypeScript
//	进入创建的文件目录
cd vite-vue3
// 安装默认依赖 先查看当前源,切换淘宝镜像然后再安装
npm config get registry
npm config set registry=http://registry.npm.taobao.org/
npm install
// 运行
npm run dev

在这里插入图片描述
并未运行成功
(node:4960) UnhandledPromiseRejectionWarning: SyntaxError: Unexpected token ‘??=’
at Loader.moduleStrategy (internal/modules/esm/translators.js:145:18)
(Use node --trace-warnings ... to show where the warning was created)
(node:4960) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block
, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:4960) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.在这里插入图片描述
若运行出错,检查node版本并切换至高版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可采用以下方法更轻松

在这里插入图片描述

在这里插入图片描述

二、熟悉流程

在这里插入图片描述
main.ts
在这里插入图片描述
在src文件下的components新建想要添加的组件Person.vue
数据放在data,事件放在methods(这是vue2写法)

<template>
  <div class="person">
     <h2>姓名:{{name}}</h2>
    <h2>年龄:{{age}}</h2>
    <button @click="changeName">修改姓名</button>
    <button @click="changeAge">修改年龄</button>
    <button @click="showTel">查看联系方式</button>
  </div>
</template>

<script lang="ts">
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name:'Person',
  data(){
    return{
      name:'小小',
      age:19,
      tel:'12345566'
    }
  },
  methods:{
    changeName(){
        this.name='xiao'
    },
    changeAge(){
      this.age+=1
    },
    showTel(){
      alert(this.tel)
    }
  }
}

</script>

<style>
.person{
  background-color: #f8f8f8;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
button{
  margin:0 5px ;
}
</style>

vue3的写法如下:

<template>
  <div class="person">
<!--     <h2>姓名:{{a}}</h2>-->
<!--    <h2>年龄:{{b}}</h2>-->
    <h2>姓名:{{name}}</h2>
    <h2>年龄:{{age}}</h2>
    <button @click="changeName">修改姓名</button>
    <button @click="changeAge">修改年龄</button>
    <button @click="showTel">查看联系方式</button>
  </div>
</template>

<script lang="ts">
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name:'Person',
  setup(){
    // console.log('@@',this)  // setup函数中的this是undefined,vue3弱化this
    //数据,原来写在data中的
    let name = '小夏'   //不是响应式的
    let age = 19      //注意此时的age不是响应式的
    let tel = '1232332423'

    // 方法
    function changeName(){
        console.log(1)
        name='sun'     // 注意:这样写name,页面是不会变化的
        console.log(name)  // 测试是否修改
    }
    function changeAge(){
        age += 1
    }
    function showTel(){
        alert(tel)
    }

    // 将数据、方法交出去,模版中才可以使用
    // return {a:name,b:age}
    return {name,age,changeAge,changeName,showTel}

    // setup的返回值也可以是一个渲染函数
    // return function (){
    //   return '哈哈哈哈'
    // }
    // return ()=>'哈哈哈哈哈'  // 箭头函数
  }

}

</script>

<style>
.person{
  background-color: #f8f8f8;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
button{
  margin:0 5px ;
}
</style>


App.vue
在template里写html内容,script里写js或ts,注册相应组件,并在template里引用该组件

<template>
  <div class="app">
    <h1>你好啊</h1>
    <Person/>
  </div>
</template>

<script lang="ts">
import Person from "@/components/Person.vue";
export default {
  name:'App',  //组件名
  components:{Person}  //注册组件
}

</script>

<style>
.app{
  background-color: #2c3e50;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
</style>


总结

1.Vue3的setup和vue2传统的配置项(data,methods)可不可以同时写?若冲突,以谁为主?
答:vue2的选项式语法可以和vue3的setup共存。data,methods可以和setup同时存在。data可以读取setup里的数据,setup不能读取data里数据

<template>
  <div class="person">
<!--     <h2>姓名:{{a}}</h2>-->
<!--    <h2>年龄:{{b}}</h2>-->
    <h2>姓名:{{name}}</h2>
    <h2>年龄:{{age}}</h2>
    <button @click="changeName">修改姓名</button>
    <button @click="changeAge">修改年龄</button>
    <button @click="showTel">查看联系方式</button>
    <hr>
    <h2>测试1:{{a}}</h2>
    <h2>测试2:{{c}}</h2>
    <h2>测试3:{{d}}</h2>
    <button @click="b">测试</button>
  </div>
</template>

<script lang="ts">
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name:'Person',
  data(){
    return{
      a:100,
      c:this.name,
      d:200
    }
  },
  methods:{
    b(){
      console.log('b')
    }
  },
  setup(){
    // console.log('@@',this)  // setup函数中的this是undefined,vue3弱化this
    //数据,原来写在data中的
    let name = '小夏'   //不是响应式的
    let age = 19      //注意此时的age不是响应式的
    let tel = '1232332423'
    

    // 方法
    function changeName(){
        console.log(1)
        name='sun'     // 注意:这样写name,页面是不会变化的
        console.log(name)  // 测试是否修改
    }
    function changeAge(){
        age += 1
    }
    function showTel(){
        alert(tel)
    }

    // 将数据、方法交出去,模版中才可以使用
    // return {a:name,b:age}
    return {name,age,changeAge,changeName,showTel}

    // setup的返回值也可以是一个渲染函数
    // return function (){
    //   return '哈哈哈哈'
    // }
   // return ()=>'哈哈哈哈哈'  // 箭头函数
  }

}

</script>

<style>
.person{
  background-color: #f8f8f8;
  box-shadow: 0 0 10px;
  border-radius: 10px;
  padding: 20px;
}
button{
  margin:0 5px ;
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EFcore的实体类配置

1 约定配置 约定大于配置&#xff0c;框架默认了许多实体类配置的规则&#xff0c;在约定规则不满足要求时&#xff0c;可以显示地定义规则 1 数据库表明在不指定的情况下&#xff0c;默认使用的是数据库上下文类【DBContext】中DbSet 的属性名&#xff1b; 2 数据库表列的名字…

Vue3新手教程

Vue3新手教程 一. Vue3简介1. 性能的提升2.源码的升级3. 拥抱TypeScript4. 新的特性 二. 创建Vue3工程1. 基于 vue-cli 创建2. 基于 vite 创建(推荐)3. 一个简单的效果 三. Vue3核心语法1. OptionsAPI 与 CompositionAPI2. 拉开序幕的 setup2.1 setup 概述2.2 setup 的返回值2.…

【计算机考研】 跨考408全年复习规划+资料分享

跨专业备考计算机考研408&#xff0c;确实是一项挑战。在有限的时间内&#xff0c;我们需要合理安排时间&#xff0c;制定有效的学习计划&#xff0c;做到有效地备考。回顾我之前对408的经验&#xff0c;我想分享一些备考计划和方法。 要认清自己的起点。作为跨专业考生&#…

智能计算模拟: DFT+MD+ML 深度融合及科研实践

第一性原理、分子动力学与机器学习三者的交汇融合已在相关研究领域展现强劲的研究热潮。借助第一性原理计算揭示材料内在的量子特性&#xff0c;并结合分子动力学模拟探究材料在实际环境下的动态行为&#xff1b;运用机器学习算法与上述方法结合&#xff0c;开发高性能预测模型…

GaussDB WDR分析之节点篇与点评分析

今天继续介绍GaussDB的WDR报告&#xff0c;我们今天分析一下CN/DN节点的报告。昨天分析集群报告的时候发现集群报告里缺乏一些DBA分析问题所需要的数据&#xff0c;今天我们来看看是否在节点的报告里能够找到它们。GaussDB的节点报告格式都差不多&#xff0c;只不过CN/DN节点的…

力扣hot100:994. 腐烂的橘子(多源BFS)

这是一个典型的多源BFS问题&#xff0c;如果初学数据结构的同学&#xff0c;可能第一次不能想到&#xff0c;但是如果做过一次应该就能运用了。      主要思路大概是初始时&#xff0c;多个点进入队列然后进行BFS。将某一等价集合视作同一个起始点&#xff08;超级源点&…

阿里二面:Java中锁的分类有哪些?你能说全吗?

引言 在多线程并发编程场景中&#xff0c;锁作为一种至关重要的同步工具&#xff0c;承担着协调多个线程对共享资源访问秩序的任务。其核心作用在于确保在特定时间段内&#xff0c;仅有一个线程能够对资源进行访问或修改操作&#xff0c;从而有效地保护数据的完整性和一致性。…

kvm虚拟化

kvm虚拟化 1. 虚拟化介绍 虚拟化是云计算的基础。简单的说&#xff0c;虚拟化使得在一台物理的服务器上可以跑多台虚拟机&#xff0c;虚拟机共享物理机的 CPU、内存、IO 硬件资源&#xff0c;但逻辑上虚拟机之间是相互隔离的。 物理机我们一般称为宿主机&#xff08;Host&…

arm 外部中断

main.c: #include"key_inc.h" //封装延时函数 void delay(int ms) {int i,j;for(i0;i<ms;i){for(j0;j<2000;j){}} } int main() {//按键中断的初始化key1_it_config();key2_it_config();key3_it_config();while(1){printf("in main pro\n");delay(1…

(人才测评)自媒体运营的招聘入职测评方案

互联网如今发展的如此之快&#xff0c;各种信息爆炸&#xff0c;各种手机游戏量产的时代&#xff0c;除此之外还有一些新兴的岗位诞生&#xff0c;那就是自媒体行业&#xff0c;可以说有了互联网&#xff0c;只要你想做&#xff0c;一个人也可以在网络上发布有趣搞笑的视频&…

WPF使用外部字体,思源黑体,为例子

1.在工程中新建文件夹&#xff0c;命名为“Font"。 2.将下载好的字体文件复制到Font文件夹。 3.在工程中&#xff0c;加入静态资源 <Window.Resources><FontFamily x:Key"SYBold">/AnalyzeImage;Component/Font/#思源黑体 CN Bold</FontFamily…

Ecmascript 和javascript的区别

ECMAScript 是什么&#xff1f; 想象一下&#xff0c;ECMAScript&#xff08;简称ES&#xff09;是个“剧本”&#xff0c;规定了“舞台剧”的基本表演规则和动作。在这个比喻中&#xff0c;“舞台剧”就是我们常说的JavaScript。ECMAScript是由欧洲计算机制造商协会&#xff0…

【保姆级教程】YOLOv8_Cls图像分类:训练自己的数据集

一、YOLOV8环境准备 1.1 下载安装最新的YOLOv8代码 仓库地址&#xff1a; https://github.com/ultralytics/ultralytics1.2 配置环境 pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple二、数据准备 我这里准备了猫和狗的图片&#xff0c;按类别…

学习周报:文献阅读+Fluent案例+水力学理论学习

目录 摘要 Abstract 文献阅读&#xff1a; 文献摘要 现有问题 研究目的及方法 PINN的设置 NS方程介绍 损失函数 训练方法 实验设置 对照组设置 实验结果展示 点云数、隐藏层数和每个隐藏层的节点数对PINN精度的影响 点云数对PINN的影响&#xff1a; 隐藏层数的影…

喜欢我中文编程吗?这么喜欢中文编程哥们给你来点关键字呗

// chinese_commands.h 太优雅了哥们// 变量类型 #define 整型 int #define 浮点型 float #define 双浮点型 double #define 字符 char #define 长整型 long #define 自动 auto #define 布尔 bool// 修饰符 #define 静态 static #define 常量 const #define 虚拟 virtual #defi…

吴恩达深度学习笔记:神经网络的编程基础2.1-2.4

目录 第一门课&#xff1a;神经网络和深度学习 (Neural Networks and Deep Learning)第二周&#xff1a;神经网络的编程基础 (Basics of Neural Network programming)2.1 二分类(Binary Classification)2.2 逻辑回归(Logistic Regression)2.3 逻辑回归的代价函数&#xff08;Lo…

C++基础之继承(十五)

一.继承的定义 当一个派生类继承一个基类时&#xff0c;需要在派生类的类派生列表中明确的指出它是从哪个基类继承而来的。类派生列表的形式如下&#xff1a; class 派生类 : public/private/protected 基类 { }&#xff1b; 派生类生成的三个步骤&#xff1a; 吸收基类成员…

如何恢复回收站被清空的文件?3个宝藏方法大公开!

“怎么办&#xff1f;不小心把回收站里的文件都清空了&#xff0c;现在没法找回我的重要数据了&#xff0c;有什么比较好的方法吗&#xff1f;快来帮帮我吧&#xff01;” 回收站作为Windows系统中的一个重要功能&#xff0c;可以帮助我们暂时存放删除的文件和文件夹&#xff0…

数据结构——树与二叉树

目录 树与二叉树 1.树的定义 2.树的有关术语 3.二叉树&#xff08;BinaryTree&#xff09; 二叉树的性质&#xff1a; 特殊的二叉树 满二叉树&#xff1a; 完全二叉树 二叉树的存储结构 顺序存储结构 链式存储结构 二叉树以及对应接口的实现 1.二叉树架构搭建 2…

PSO-CNN-BiLSTM多输入分类预测|粒子群优化算法-卷积-双向长短期神经网络分类预测|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…