vue2语法速通

news2025/3/12 2:03:36

首先,git clone下来的项目要npm install下载依赖,如果是vue项目,运行通常npm run serve或者npm run dev

vue速通一下

  1. 使用vite创建项目(较快)

npm create vite

配置文件

src/  
├── assets/               # 存放静态资源,如图片、字体、视频等  
├── components/           # 公共组件  
├── views/                # 页面组件  
├── router/               # 路由配置  
├── store/                # 状态管理(Vuex 或 Pinia)
├── api/                  # 后端 API 请求  
├── utils/                # 工具函数  
├── assets/               # 样式文件,字体、图片等  
└── App.vue               # 根组件

vite.config.js:项目的配置文件,基于vite的配置

package.json:项目包文件,核心依赖项变成了vue3,vite

main.js入口文件,createApp创建Vue实例,吃实话vue应用,配置全局插件,引入根组件

main.js

import './style.css'
import App from './App.vue'
import { createApp } from 'vue'

createApp(App).mount('#app');
//原始new Vue()创建一个应用实例 =升级=> createApp() 将创建实例进行了封装,保证每个实例的独立封闭性

基础语法

setup:通过setup选项提供一种新的组件内部结构,以更模块化的方式组织代码

image-20250204200309324

image-20250204200629245

image-20250204200422732

指令

指令属性
<p v-text="htmlContent"></p>
<p v-html="htmlContent"></p>
渲染属性
<p v-for="item in 5">这是内容</p>
<p v-if="false">标签内容</p>
属性指令
<p v-bind:title="title">这是内容</p>
<p :title="title">这是内容</p>
事件指令
<button v-on:click="output">按钮</button>
<button @click="output">按钮</button>
表单指令 v-model可是实现数据双向绑定
<input type="text" v-model="inputValue"><!-- 可以更改内部数据从而改变页面反应 --!>   
<p v-text="inputValue"></p>
修饰符
<input type="text" v-model.trim="inputValue">trim可以实现清除数据

组件开发

Vue CLI 是一个基于Vue.js进行快速项目搭建的工具。它是一个全局安装的npm包,为Vue.js应用程序快速创建项目模板

vuex

vuex是一个专门为vue.js应用程序开发的状态管理工具

image-20250204211539447

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。以下是对 Vuex 的详细介绍:
核心概念

state:用于存储应用的所有状态数据,是一个普通的 JavaScript 对象。可以将其看作是一个“数据仓库”,包含了组件之间共享的数据。例如在一个电商应用中,购物车中的商品列表就可以存储在 state 中。

const state = {
    cartItems: []
}

组件中获取 state 数据的方式:在 Vue 组件中,可以通过 this.$store.state 来访问 state 中的数据。如果使用计算属性,代码会更加简洁和易读:

export default {
    computed: {
        cartItems() {
            return this.$store.state.cartItems;
        }
    }
}

mutations:唯一可以修改 state 的地方,是一些纯函数。每个 mutation 都有一个字符串的事件类型和一个回调函数,回调函数接收 state 作为第一个参数。这种设计保证了状态变化的可预测性。

const mutations = {
    ADD_TO_CART(state, item) {
        state.cartItems.push(item);
    }
}

触发 mutations 的方式:在组件中通过 this.$store.commit('mutationType', payload) 来触发,例如:
export default {
    methods: {
        addItemToCart() {
            const newItem = { name: 'Product 1', price: 10 };
            this.$store.commit('ADD_TO_CART', newItem);
        }
    }
}

actions:用于处理异步操作,如发送网络请求等。actions 可以触发 mutations 来间接修改 state。它也有一个上下文对象,包含了 state、commit 等属性。

const actions = {
    async fetchCartItems({ commit }) {
        try {
            const response = await fetch('https://api.example.com/cart-items');
            const data = await response.json();
            commit('SET_CART_ITEMS', data);
        } catch (error) {
            console.error('Error fetching cart items:', error);
        }
    }
}

触发 actions 的方式:在组件中通过 this.$store.dispatch('actionType', payload) 来调用,例如:
export default {
    created() {
        this.$store.dispatch('fetchCartItems');
    }
}

getters:类似于计算属性,用于获取 state 中的数据,起到对 state 数据进行过滤、计算等作用。它的优点是可以缓存计算结果,只有当依赖的 state 数据发生变化时才会重新计算。



const getters = {
    totalCartPrice(state) {
        return state.cartItems.reduce((total, item) => total + item.price, 0);
    }
}

在组件中使用 getters 的方式:与计算属性类似,通过 this.$store.getters 访问,例如:
export default {
    computed: {
        totalCartPrice() {
            return this.$store.getters.totalCartPrice;
        }
    }
}

项目中的应用场景

多组件共享状态:当多个组件需要共享数据时,将数据存储在 Vuex 的 state 中,避免了通过层层传递 prop 或者使用事件总线(Event Bus)带来的复杂性和维护成本。例如,在一个多页面的电商应用中,商品列表页、购物车页和结算页都需要共享购物车的状态,使用 Vuex 可以方便地实现数据的共享和同步更新。
复杂状态管理:对于复杂的业务逻辑,如涉及多个状态的联动变化、异步操作等,Vuex 的 mutations、actions 和 getters 提供了清晰的结构来管理和维护这些逻辑。例如在处理用户登录和权限管理时,可以在 actions 中处理登录的异步请求,通过 mutations 更新用户登录状态,使用 getters 判断用户是否具有某些权限。

优势

可预测性:由于 mutations 是唯一可以修改 state 的地方,并且是纯函数,使得应用的状态变化变得可预测。开发人员可以很容易地追踪状态的变化过程,便于调试和维护。
便于团队协作:Vuex 提供了一种集中式的状态管理方式,所有的状态数据和状态变化逻辑都集中在一个地方。团队成员可以更容易地理解和维护项目的状态管理逻辑,减少了因状态管理混乱而导致的错误。
利于代码复用:在不同的项目中,如果有相似的状态管理需求,可以方便地复用 Vuex 的模块和逻辑,提高开发效率。

vue-router

基础路由

使用的时候要在上面进行导入

image-20250204205133242

动态路由,子路由

image-20250204205724734

编程式导航,路由跳转

image-20250204210620603

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

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

相关文章

【商品库存管理——差分、前缀和】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 3e510; int l[N], r[N], b[N]; int s1[N], s0[N]; int main() {int n, m;cin >> n >> m;for(int i 1; i < m; i){cin >> l[i] >> r[i];b[l[i]], b[r[i]1]--;}int a 0…

Linux基本指令2

07.man指令&#xff08;重要&#xff09;&#xff1a; Linux的命令有很多参数&#xff0c;我们不可能全记住&#xff0c;我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man 语法: man [选项] 命令 man ls查看ls指令更多的说明。 man man&#xff1a; man指令就…

Android学习19 -- 手搓App

1 前言 之前工作中&#xff0c;很多时候要搞一个简单的app去验证底层功能&#xff0c;Android studio又过于重型&#xff0c;之前用gradle&#xff0c;被版本匹配和下载外网包折腾的堪称噩梦。所以搞app都只有找应用的同事帮忙。一直想知道一些简单的app怎么能手搓一下&#x…

人工智能导论-第3章-知识点与学习笔记

参考教材3.2节的内容&#xff0c;介绍什么是自然演绎推理&#xff1b;解释“肯定后件”与“否定前件”两类错误的演绎推理是什么意义&#xff0c;给出具体例子加以阐述。参考教材3.3节的内容&#xff0c;介绍什么是文字&#xff08;literal&#xff09;&#xff1b;介绍什么是子…

DeepSeek 的含金量还在上升

大家好啊&#xff0c;我是董董灿。 最近 DeepSeek 越来越火了。 网上有很多针对 DeepSeek 的推理测评&#xff0c;除此之外&#xff0c;也有很多人从技术的角度来探讨 DeepSeek 带给行业的影响。 比如今天就看到了一篇文章&#xff0c;探讨 DeepSeek 在使用 GPU 进行模型训练…

【Linux系统】信号:信号保存 / 信号处理、内核态 / 用户态、操作系统运行原理(中断)

理解Linux系统内进程信号的整个流程可分为&#xff1a; 信号产生 信号保存 信号处理 上篇文章重点讲解了 信号的产生&#xff0c;本文会讲解信号的保存和信号处理相关的概念和操作&#xff1a; 两种信号默认处理 1、信号处理之忽略 ::signal(2, SIG_IGN); // ignore: 忽略#…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.6 广播机制核心算法:维度扩展的数学建模

2.6 广播机制核心算法&#xff1a;维度扩展的数学建模 目录/提纲 #mermaid-svg-IfELXmhcsdH1tW69 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-IfELXmhcsdH1tW69 .error-icon{fill:#552222;}#mermaid-svg-IfELXm…

硬件产品经理:需求引力模型(DGM)

目录 1、DGM 模型简介 2、理论核心&#xff1a;打破传统线性逻辑 3、三大定律 第一定律&#xff1a;暗物质需求法则 第二定律&#xff1a;引力井效应 第三定律&#xff1a;熵减增长律 4、落地工具包 工具1&#xff1a;需求密度热力图 工具3&#xff1a;摩擦力歼灭清单…

Guided Decoding (借助FSM,有限状态自动机)

VLLM对结构化输出的支持&#xff1a; vllm/docs/source/features/structured_outputs.md at main vllm-project/vllm GitHub VLLM对tool call的支持&#xff1a; vllm/docs/source/features/tool_calling.md at main vllm-project/vllm GitHub 以上指定输出格式&#xf…

ComfyUI工作流 图像反推生成人像手办人像参考(SDXL版)

文章目录 图像反推生成人像手办人像参考SD模型Node节点工作流程效果展示开发与应用图像反推生成人像手办人像参考 本工作流旨在通过利用 Stable Diffusion XL(SDXL)模型和相关辅助节点,实现高效的人像参考生成和手办设计。用户可通过加载定制的模型、LORA 调整和控制节点对…

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.5 高级索引应用:图像处理中的区域提取

2.5 高级索引应用&#xff1a;图像处理中的区域提取 目录/提纲 #mermaid-svg-BI09xc20YqcpUam7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BI09xc20YqcpUam7 .error-icon{fill:#552222;}#mermaid-svg-BI09xc20…

响应式编程_01基本概念:前世今生

文章目录 引言响应式编程的技术优势全栈式响应式编程从传统开发模式到异步执行技术Web 请求与 I/O 模型异步调用的实现技术回调Future机制 响应式编程实现方法观察者模式发布-订阅模式数据流与响应式 响应式宣言和响应式系统 引言 大流量、高并发的访问请求的项目&#xff0c;…

LabVIEW如何有效地进行数据采集?

数据采集&#xff08;DAQ&#xff09;是许多工程项目中的核心环节&#xff0c;无论是测试、监控还是控制系统&#xff0c;准确、高效的数据采集都是至关重要的。LabVIEW作为一个图形化编程环境&#xff0c;提供了丰富的功能来实现数据采集&#xff0c;确保数据的实时性与可靠性…

vue声明周期及其作用

vue声明周期及其作用 1. 生命周期总览 2. beforeCreate 我们在new Vue()时&#xff0c;初始化一个Vue空的实例对象&#xff0c;此时对象身上只有默认的声明周期函数和事件&#xff0c;此时data,methods都未被初始化 3. created 此时&#xff0c;已经完成数据观测&#xff0…

安全策略实验

安全策略实验 1.拓扑图 2.需求分析 需求&#xff1a; 1.VLAN 2属于办公区&#xff0c;VLAN 3属于生产区 2.办公区PC在工作日时间&#xff08;周一至周五&#xff0c;早8到晚6&#xff09;可以正常访问OA server其他时间不允许 3.办公区PC可以在任意时刻访问Web Server 4.生产…

蓝桥杯C语言组:暴力破解

基于C语言的暴力破解方法详解 暴力破解是一种通过穷举所有可能的解来找到正确答案的算法思想。在C语言中&#xff0c;暴力破解通常用于解决那些问题规模较小、解的范围有限的问题。虽然暴力破解的效率通常较低&#xff0c;但它是一种简单直接的方法&#xff0c;适用于一些简单…

七. Redis 当中 Jedis 的详细刨析与使用

七. Redis 当中 Jedis 的详细刨析与使用 文章目录 七. Redis 当中 Jedis 的详细刨析与使用1. Jedis 概述2. Java程序中使用Jedis 操作 Redis 数据2.1 Java 程序使用 Jedis 连接 Redis 的注意事项2.2 Java程序通过 Jedis当中操作 Redis 的 key 键值对2.3 Java程序通过 Jedis 当中…

NLP深度学习 DAY5:Sequence-to-sequence 模型详解

Seq2Seq&#xff08;Sequence-to-Sequence&#xff09;模型是一种用于处理输入和输出均为序列任务的深度学习模型。它最初被设计用于机器翻译&#xff0c;但后来广泛应用于其他任务&#xff0c;如文本摘要、对话系统、语音识别、问答系统等。 核心思想 Seq2Seq 模型的目标是将…

04树 + 堆 + 优先队列 + 图(D1_树(D17_综合刷题练习))

目录 1. 二叉树的前序遍历&#xff08;简单&#xff09; 1.1. 题目描述 1.2. 解题思路 方法一&#xff1a;递归&#xff08;推荐使用&#xff09; 方法二&#xff1a;非递归&#xff08;扩展思路&#xff09; 2. 二叉树的中序遍历&#xff08;中等&#xff09; 2.1. 题目…

总结11..

#include <stdio.h> #include <string.h> #define MAXN 1001 #define MAXM 1000001 int n, m; char maze[MAXN][MAXN]; int block[MAXN][MAXN]; // 标记每个格子所属的连通块编号 int blockSize[MAXN * MAXN]; // 记录每个连通块的大小 int dx[] {0, 0, 1, -1};…