Vue基本知识1,安装创建以及常用指令
1. Vue的概念
-
概念
vue是一个渐进式的JavaScript开发框架;基于MVVM实现数据驱动的框架
官网
还可以用来做SPA(single page web application): 一个网页就是一个应用;例如网易云
-
特点
2. 安装vue-cli,环境的搭建
- 全局安装脚手架, Vue命令;只需安装一次
yarn global add @vue/cli
- 创建项目
vue create项目名称
创建项目有几个选项
- 选择安装的Vue版本,选第三个自己选择配置, 用上下箭头选择;babel是转语法工具
Default ([Vue 3] babel, eslint)
Default ([Vue 2] babel, eslint)
Manually select features
Babel
TypeScript
Progressive Web App (PWA) Support
Router
Vuex
CSS Pre-processors
Linter / Formatter // 启用后要求用大驼峰命名,两个单词以上等等。
Unit Testing
E2E Testing
3.x
2.x
Sass/SCSS (with dart-sass)
Less
Stylus
In dedicated config files
In package.json
Save this as a preset for future projects? (y/N)
- 选择自己的安装命令;这里我喜欢yarn,所以选择yarn
use yarn
use npm
cd 项目名称
yarn serve //运行
Local: http://localhost:8080/
Network: http://172.20.10.4:8080/
3. 项目结构说明
.git 隐藏文件 官方仓库,直接删除
node_modules 依赖包
public 静态首页目录
src 项目开发目录,新有用户写的代码都在这里面
src/assets 公共静态资源目录,图片、css、宇体等资源都可以放在这里
src/components 组件目录,所有的子组件都放在这里
src/App.vue vue的根组件
src/main.js 主模块
.gitignore git忽略列表
babel.configjs babel的配置文件
jsconfig.json js配置文件
package.json 包描述文件
package-lock.json版本锁
package-lock.json版本锁
vue.configjs vue的配置文件
如果删除了某个文件报错,去App.vue删除对应路径即可
比如:
assets/logo.png 删除
components/ HelloWorld.Vue 删除
| |
| |
| <img alt="Vue logo" src="./assets/logo.png"> |
| <HelloWorld msg="Welcome to Your Vue.js App"/> |
| |
| import HelloWorld from './components/HelloWorld.vue' |
| components: { |
| HelloWorld |
| } |
| |
4. 安装VSCode插件,帮助写Vue代码
- Vuter
- Vue VSCode Snippets
- Vue Language Features (Volar)
5. 组件化
1. 什么是组件?
组件(component)
组件就是网页的零部件,一个网页的一个部分就是一个组件,可以由多人开始同一 个网而的各种组件
2. 单文件组件
- 一个XXX.vue的文件就是一个单文件组件,由 template、script、style三部分组成。
| <template> |
| //html模版;有且只有一个根标签 |
| </template> |
| |
| <script> |
| |
| </script> |
| |
| <style scoped> |
| //样式 |
| //scoped:加了这个属性说明样式是局部样式,样式只针对当前组件生效 |
| </style> |
- 快捷语法;
- vbl 快速写出结构,
更好
- vbase 快速写出结构
- 创建新的组件
在components文件夹下创建XXX.vue文件;主文件引入使用;注意文件名最好大驼峰
3. 使用自定义组件,谁要使用组件谁就引入注册
- 引入组件 (引入一个已经写好的xxx。mue 组件)名字随便取
| import MyButton from “组件路径” |
还可以这样引入;@代表src文件。
| import MyBtn from ‘@/components/MyBtn.vue’ |
- 注册组件(在components 里面注册)
| export default { |
| components: { |
| MyButton, |
| } |
| } |
- 使用组件(通过标签名使用)
大驼峰可以改写成:
6. Mustach 表达式和配置选项;(胡须表达式)
1. 数据声明(属性)
| |
| data() { |
| return { |
| name: '张三' |
| } |
| } |
2. 将数据渲染到页面上
| <div> |
| |
| <h1>你好,{{ name }}</h1> |
| </div> |
3. 方法的声明方式
| |
| methods: { |
| print() { |
| this.names = '123', |
| this.pwd = '123' |
| } |
| } |
数据用data方法return出去
, 方法放入methods:对象中
方法属性都写在这里面:
7. 常用指令
1. 什么是指令
vue指令是指标签上的 v-* 模式的厲性,,可以实现很多数据遍历、渲染、事件绑定等等功能
所有的指令可以去官网查看
2. v-text和 v-html
区别在于:一个只能渲染文字,一个还能渲染标签;
| |
| <h2 v-text="msg"></h2> |
| |
| |
| <h2 v-html="msg"></h2> |
这里msg是暴露出来的数据
| data() { |
| return { |
| msg: '你好啊<b>我的</b>朋友' |
| } |
| } |
3. v-show和v-if
- v-show 表达式来决定标签
显示或者隐藏
;通过css的display来控制
-
- v-if 表达式决定
创建或者删除标签
| <h2 v-show="msg>=18">你好啊</h2> |
| <h2 v-if="msg>=18">真的</h2> |
- v-if 和 v-for尽量不要一起用
4. v-else 和 v-else-if
- v-else要和v-if一起使用;
两个标签必须挨在一起
| <div v-if="num>22">好</div> |
| <div v-else>不好</div> |
- v-else-if要配合v-if一起使用,v-else不一定要用
| <h2 v-if="num>30">大</h2> |
| <h2 v-else-if="num>20">中</h2> |
| <h2 v-else>小</h2> |
5. v-for;遍历数组和对象
用于遍历数组和对象
- 用法1:只遍历值,不遍历索引;
冒号
是v-bind
的简写
| |
| <h2 v-for="v in arr" :key="v">{{ v }}</h2> |
- 用法2: 遍历值和索引
| <h2 v-for="(v,i) in arr" :key="i">{{i}} - {{ v }}</h2> |
- 用法3:遍历对象;v是值,k是键名,i是索引
| <h2 v-for="(v,k,i) in obj" :key="v">{{v}} - {{k}} - {{i}}</h2> |
| <h2 v-for="(v,k) in obj" :key="v">{{v}} - {{k}}</h2> |
- 偶遇一个
奇怪的报错
代码已经没有问题
了,但还是报错!
;只需要将一些空格删除并重输入即可
6. v-model;数据双向绑定
用于实现数据双向绑定
,主要用于表单元素:input
、select
、 textarea
button按钮要type:button , 不然会提交
- MVVM架构模式
页面的输入框改变数据后,数据改变页面显示数据的元素就会改变
- 示例
| |
| <p><input type="text" v-model="names"></p> |
| <p><input type="password" v-model="pwd"></p> |
| |
| <h2>{{ names }}</h2> |
| <h2>{{ pwd }}</h2> |
7. v-on事件处理
- 写法
- 简写
@事件名=“函数名”
- 一般写法
v-on:click=“函数名”
- 示例:
| <button type="button" @click="print">提交</button> |
- 下方的事件函数
| export default { |
| |
| methods: { |
| print() { |
| this.names = '123', |
| this.pwd = '123' |
| } |
| } |
| } |
8. v-bind 给属性绑定动态数据
- 绑定动态数据
示例:点击改变数据;(数据操作)
| <h1 :title="title" @click="title = '标题'">今天星期3</h1> |
| export default { |
| data() { |
| return { |
| title: '我是大标题' |
| } |
| }, |
| } |
还可以用来改变标签其它的属性
, 比如input的type
- 绑定style样式(样式操作)
这里的css是一个变量,为一个对象,用它来控制样式
| <h1 :style="css" @click="changeText">今天星期3</h1> |
| export default { |
| data() { |
| return { |
| css: { |
| color: '#f00', |
| fontSize: '100px' |
| } |
| } |
| }, |
| methods: { |
| changeText() { |
| this.css.color = '#00f' |
| this.css.fontSize = '15px' |
| } |
| } |
| } |
- 绑定class (样式操作)
| // 声明样式 |
| .show1 { |
| font-size: 100px; |
| color: green; |
| } |
| .show2 { |
| font-size: 200px; |
| color: lightcoral; |
| } |
| export default { |
| data() { |
| return { |
| className: 'show1' |
| } |
| }, |
| |
| methods: { |
| |
| changeClass() { |
| this.className =this.className === 'show1' ? 'show2' : 'show1' |
| } |
| } |
| } |
| |
| <h1 :class="className" @click="changeClass">今天星期3吧</h1> |
- 类名操作2;另外一种方式来操作类名
多个类名就用逗号隔开即可
| <h1 :class="{show1: true, show2: false}"></h1> |
9.其它指令
- v-pre 不編译 Mustache 模板表达式,直接当成普通的字符串输出
- v-cloak 隐藏 Mustache 表达式,直到有数据后,才显示出来
- v-once 只渲染一次,数据再变也不会渲染
8. 利用指令存放数据在标签
直接存是不能做到的
,必须用 :data-自定义属性
的方式, 才能把属性存到标签
注意绑定的函数不能有括号
| <td><button @click="deleTr" v-bind:data-h="i">删除</button></td> |
| |
| deleTr(e) { |
| this.list.splice(e.target.dataset.h, 1) |
| } |
- 方法2 ,
索引可以直接从函数传进来
;注意,事件函数是有括号的
;用于传参。
| <td><button @click="deleTr(i)">删除</button></td> |
| |
| deleTr(i) { |
| this.list.splice(i, 1) |
| console.log(this.list); |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南