vue的工程化开发全流程,以及开发中的细节语法和用法

news2024/11/27 2:31:36

vue的工程化开发全流程

文章目录

  • vue的工程化开发全流程
    • 1、工程化开发&脚手架Vue CLI
      • 1.1、前言
      • 1.2、脚手架Vue CLI
      • 1.3、脚手架目录文件介绍&项目运行流程
      • 1.4、组件化开发&根组件
      • 1.5、普通组件的注册使用
    • 2、工程化开发细则
      • 2.1、组件的三大组成部分
      • 2.2、组件的样式冲突scoped
      • 2.3、data是一个函数
      • 2.4、组件通信
        • 2.4.1、不同的组件关系和组件通信方案分类
        • 2.4.2、组件通信的解决方案
        • 2.4.3、非父子通信- event bus事件总线
      • 2.5、prop
        • 2.5.1、prop详解
        • 2.5.2、prop校验
        • 2.5.3、prop & data、单向数据流
      • 2.6、v-mdoel原理
      • 2.7、表单类组件封装&v-model简化代码

1、工程化开发&脚手架Vue CLI

1.1、前言

开发Vue的两种方式:

  1. 核心包传统开发模式:基于html / css / js 文件,直接引入核心包,开发Vue。

  2. 工程化开发模式:基于构建工具(例如: webpack )的环境中开发Vue。

image-20230914210404013

1.2、脚手架Vue CLI

基本介绍:

  • Vue CLl是 Vue官方提供的一个全局命令工具

  • 可以帮助我们快速创建一个开发Vue 项目的标准化基础架子。【集成了webpack配置】

使用步骤:

    1. 全局安装(一次): yarn global add @vue/clinpm i @vue/cli -g
    1. 查看Vue版本: vue --version
    1. 创建项目架子: vue create project-name(项目名-不能用中文)
    1. 启动项目: yarn servenpm run serve(找package.json)

1.3、脚手架目录文件介绍&项目运行流程

项目的目录:

image-20230914214956923

项目的运行流程:

image-20230915204632794

  • main.js的核心代码:

    // 作用:导入App.vue,基于App.vue创建结构渲染index.html
    //1.导入vue核心包
    import Vue from 'vue'
    
    //2、导入App根组件 
    import App from './App.vue'
    
    // 在控制台中提示:当前处于什么环境(生产环境、开发环境)
    Vue.config.productionTip = false
    
    //3.Vue实例化,提供render方法->基于App.vue结构渲染index.html
    new Vue({
      //el: '#app',作用:和$mount('选择器)作用一致,用于指定vue所管理容器
      // render: h => h(App),//简写模式,下面为全写,createElement为形参
      render: (createElement) => {
        //  基于App创建元素结构
        return createElement(App)
      }
    
    }).$mount('#app')
    
  • index.html的核心代码:

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

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <link rel="icon" href="<%= BASE_URL %>favicon.ico">
  <title>
    <%= htmlWebpackPlugin.options.title %>
  </title>
</head>

<body>
    
  <!-- 兼容:给不支持js的浏览器一个提示-->
  <noscript>
    <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled.
        Please enable it to continue.</strong>
  </noscript>

  <!-- vue所管理容器的区域 -->
  <div id="app">
    <!-- 在工程化开发中,这里不再编写模版语法,而是通过app.vue提供结构语法 -->
  </div>
      
  <!-- built files will be auto injected -->
</body>

</html>

1.4、组件化开发&根组件

  • 组件化:一个页面可以拆分成一个个组件,每个组件有着自己独立的结构、样式、行为。

    好处:便于维护,利于复用→提升开发效率。

  • 根组件:整个应用最上层的组件,包裹所有普通小组件。

组件化开发图示:

image-20230915205130029
  • 一个根组件App.vue,包含的三个部分:
    1. template结构(只能有一个根节点)
    2. style 样式(可以支持less,需要装包 less和less-loader )
    3. script行为

1.5、普通组件的注册使用

组件注册的两种方式:

  1. 局部注册:只能在注册的组件内使用
    1. 创建.vue文件(三个组成部分)
    2. 在使用的组件内导入并注册
  2. 全局注册:所有组件内都能使用
    1. 创建.vue文件(三个组成部分)
    2. main.js 中进行全局注册

使用:
当成html标签使用<组件名></组件名>
注意:
组件名规范→大驼峰命名法,如:Header

2、工程化开发细则

2.1、组件的三大组成部分

  1. 结构<template>

    • 只能有一个根元素
  2. 样式<style>

    • 全局样式(默认):影响所有组件
    • 局部样式: scoped下样式,只作用于当前组件
  3. 逻辑<script>

    • el根实例独有,data是一个函数,其他配置项一致

2.2、组件的样式冲突scoped

默认情况:写在组件中的样式会全局生效→因此很容易造成多个组件之间的样式冲突问题。

1.全局样式:默认组件中的样式会作用到全局

2.局部样式:可以给组件加上scoped 属性,可以让样式只作用于当前组件

scoped原理:
	1.给当前组件模板的所有元素,都会被添加上一个自定义属性data-v-5f6a9d56(data-v-hash值)区分开不同的组件
	2. css选择器后面,被自动处理,添加上了属性选择器div[data-v-5f6a9d56]

2.3、data是一个函数

  • 一个组件的data选项必须是一个函数。从而保证每个组件实例,维护独立的一份数据对象。
<template>
  <div class="base-count">
    <button @click="count--">-</button>
    <span>{{ count }}</span>
    <button @click="count++">+</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      count: 100,
    };
  }
};
</script>

image-20230916135138414

每次创建新的组件实例,都会新执行一次data函数,得到一个新对象。保证每个实例都独立的维护一个数据对象。

2.4、组件通信

概念:组件通信,就是指组件与组件之间的数据传递

  • 组件的数据是独立的,无法直接访问其他组件的数据
  • 想用其他组件的数据→组件通信
2.4.1、不同的组件关系和组件通信方案分类

组件关系分类(如图):

  1. 父子关系:

    1. 父组件通过props将数据传递给子组件
    2. 子组件利用$emit通知父组件修改更新
  2. 非父子关系:

    • provide & inject或eventbus
  3. 通用方案:vuex

image-20230916135940866

2.4.2、组件通信的解决方案

image-20230916135804596

父传子props属性:

image-20230916151703556

子传父$emit属性:

image-20230916153003538

2.4.3、非父子通信- event bus事件总线

作用:非父子组件之间,进行简易消息传递。(复杂场景→Vuex)

  1. 创建一个都能访问到的事件总线(空Vue 实例)→utils/EventBus.js

image-20230919111134930

  1. A组件(接收方),监听Bus实例的事件
  1. B组件(发送方),触发Bus 实例的事件

image-20230919115448778

2.5、prop

2.5.1、prop详解
  • Prop定义:组件上注册的一些自定义属性Prop
  • 作用:向子组件传递数据
  • 特点:
    • 可以传递任意数量的prop
    • 可以传递任意类型的prop

代码演示:

image-20230916154803410

2.5.2、prop校验

作用:为组件的prop指定验证要求,不符合要求,控制台就会有错误提示–>帮助开发者,快速发现错误

语法:①类型校验②非空校验③默认值④自定义校验

  1. 基础写法(类型校验)
export default {
    //此种方式就没对值进行校验,假如传入其他非数字类型也会传参
    // props: ["precent"],

    //将props写成对象的形式来约束参数类型(基础写法,类型校验)
    props: {
        precent: Number //String Boolean Array Object Function
    }
};
  1. 完整写法(类型,非空,默认,自定义)
     props: {
        precent: {
            type: Number, //类型校验 Number String Boolean Array Object Function
            required: true, //是否可以空,true:表示开启非空验证
            default: 0, //默认的参数,没有值的时候使用该值
            validator(value) { //value是传过来的值
                // 在此进行自定义的代码校验逻辑
                
                return true;//返回true:即通过了代码逻辑,false:没有通过代码逻辑
            }
        }
    }
2.5.3、prop & data、单向数据流

prop与data的共同点和区别:

  • 共同点:都可以给组件提供数据。
  • 区别:
    • data的数据是自己的→随便改
    • prop的数据是外部的→不能直接改,要遵循单向数据流

单项数据流:父级prop 的数据更新,会向下流动,影响子组件。这个数据流动是单向的。

所以,当在子组件需要修改来自父组件prop的值时,需要通过$emit来将修改的逻辑传到父组件,在父组件修改传到子组件的值,再根据单项数据流的特点,从而改变子组件的值。

2.6、v-mdoel原理

  • 原理:v-model本质上是一个语法糖(语法的简写)。例如应用在输入框上,就是value属性和 input事件的合写。

  • 作用:提供数据的双向绑定

    • 数据变,视图跟着变:value
    • 视图变,数据跟着变@input
  • 注意:$event用于在模板中,获取事件的形参

v-model原理代码演示:

image-20230919213443164

2.7、表单类组件封装&v-model简化代码

  1. 表单类组件封装
    父传子:数据应该是父组件 props传递过来的,v-model拆解绑定数掂

    子传父:监听输入,子传父传值给父组件修改

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

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

相关文章

yolov8在设置amp=False 之后map 训练依旧为0 解决办法

可能原因 是cuda 版本导致的半精度浮点数计算出现nan的bug 解决办法 设置ampFalse 就是不使用混合精度训练。或者直接改用低版本的cuda和pytorch。cuda11.6 以下 直接有效也有可能是学习率过高 降低学习率 设置ampFalse之后还是存在问题 是因为yolov8库的问题 按以下修改 找到…

RKDevTool打包成update.img

(1) 准备好RKDevTool_Release和rockdev目录相关的文件工具 (2) 在rockdev建立image目录 (3) 往image填入和package-file有关的img文件 (4) 运行需要的xxx_mkupdate文件,直到生成想要的update.img (5) 导入烧录工具,文件大,需要等待一段时间,进入MASKROM模式,点击烧录upd…

我只是个小市民——经受不住宏大叙事

我只是个小市民 ——经受不住宏大叙事 作日看到一个曾经的朋友在朋友圈晒出了在某地旅游的照片&#xff0c;照片清新动人&#xff0c;狠狠地打入了我的内心&#xff0c;我知道光靠手机是拍不出来这样唯美的画面的&#xff0c;于是我问她是如何弄出这么好看的照片&#xff0c;…

淘宝商品sku数据接口监控

淘宝商品sku数据接口监控是指通过API接口对淘宝店铺的商品库存、价格、销售量等数据进行实时监控&#xff0c;以便商家能够及时调整销售策略、优化库存、了解竞争对手的动态等。 监控的具体功能包括&#xff1a; 实时监控商品库存和价格变化&#xff0c;及时调整自己的销售策…

数据结构前瞻

集合框架 JAVA的集合框架是定义在java.util包下的一组接口和实现类&#xff0c;用于将多个元素置于一个单元中&#xff0c;对这些元素进行快速&#xff0c;便捷的存储&#xff0c;减速和管理&#xff0c;即增删查改 下面的格子&#xff0c;黄色代表接口&#xff0c;蓝色代表抽…

监控办公室电脑用什么软件?

监控办公室员工电脑的工作情况是一项非常重要的管理任务&#xff0c;它可以帮助企业管理者及时发现员工的问题、提高工作效率和保障企业安全。以下是一些具体的方法和步骤&#xff0c;供您参考&#xff1a; 1、安装监控软件 在监控员工电脑之前&#xff0c;您需要先安装一款专…

Redis核心数据结构实战与高性能解析

目录 一、安装Redis 二、Redis线程与高性能 2.1 Redis是单线程么&#xff1f; 2.2 Redis读写是单线程为何这么快&#xff1f; 2.3 Redis如何处理并发操作命令&#xff1f; 三、核心数据结构实战 3.1 字符串常用操作实战 SET 存入键值对 SETNX SETEX MSET 批量存入键…

vue3中两个el-select下拉框选项相互影响

vue3中两个el-select下拉框选项相互影响 1、开发需求2、代码2.1 定义hooks文件2.2 在组件中使用 1、开发需求 如图所示&#xff0c;在项目开发过程中&#xff0c;遇到这样一个需求&#xff0c;常规时段中选中的月份在高峰时段中是禁止选择的状态&#xff0c;反之亦然。 2、代…

《Cesium 进阶知识点》- 关闭天空盒,自定义背景图

效果 关键代码 1.代码第 4 行&#xff0c;初始化时配置 webgl.alpha 为 true&#xff1b; 2.代码第 8 行&#xff0c;不显示天空盒&#xff1b; 3.代码第 9 行&#xff0c;背景色透明&#xff1b; const viewer new Cesium.Viewer(cesiumContainer, {contextOptions: {…

室内导航制作:从背景到实施效益的全面解析

室内导航市场需求的增长主要源于两方面&#xff1a;一是人们对便捷生活的追求&#xff0c;二是物联网、大数据、人工智能等技术的发展。在日常生活中&#xff0c;我们经常需要在复杂的环境中进行定位和导航&#xff0c;比如大型购物商场、机场、车站等。传统的室外导航方式无法…

雷龙CS SD NAND(贴片式TF卡)性能体验及应用

前段时间有幸得到了雷龙出品的贴片式的TF卡的芯片及转接板&#xff0c;从而对其产品进行了相应的了解和测评。 从获得的相关资料看&#xff0c;雷龙出品的贴片式芯片分为两类&#xff0c;即BOW型和AOW型&#xff0c;其中BOW型为第一代产品&#xff0c;属商业级&#xff1b;AOW…

评价实施范围

声明 本文是学习GB-T 42874-2023 城市公共设施服务 城市家具 系统建设实施评价规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件确立了城市家具系统建设实施的评价原则、评价流程&#xff0c;给出了评价指标&#xff0c;描述了 方…

Zabbix“专家坐诊”第204期问答汇总

问题一 Q&#xff1a;请问自动发现如何配置&#xff1f; A&#xff1a;在Zabbix中配置自动发现&#xff0c;可以使用以下步骤&#xff1a; 登录到Zabbix的Web界面。 确保您具有管理员或具有适当权限的用户角色。 导航到“配置”菜单&#xff0c;然后选择“自动发现”。 点击…

虹科案例 | LIN/CAN总线汽车零部件测试方案

文章来源&#xff1a;虹科汽车电子 点此阅读原文 虹科的LIN/CAN总线汽车零部件测试方案是一款优秀的集成套装&#xff0c;基于Baby-LIN系列产品&#xff0c;帮助客户高效完成在测试、生产阶段车辆零部件质量、功能、控制等方面的检测工作。 1、汽车零部件测试的重要性&#xf…

基于javaweb的顶岗实习管理系统(jsp+servlet)

系统简介 本项目采用eclipse工具开发&#xff0c;jspservletjquery技术编写&#xff0c;数据库采用的是mysql&#xff0c;navicat开发工具。 三个角色&#xff1a;管理员&#xff0c;教师&#xff0c;学生 模块简介 管理员&#xff1a; 1、登录 2、学生管理 3、公告管理 …

软考之软件设计师考试总结(内附资料)

今年5月27日参加的软考&#xff0c;虽然研究生专业已经和计算机无缘了&#xff0c;但是只要想学&#xff0c;就没有什么能够阻挡。 参加软考的初衷只是因为&#xff0c;&#xff0c;&#xff0c;辽宁省软考它不要钱&#xff0c;不要钱的证书咱不白嫖一个说不过去&#xff0c;先…

存储bag文件并转csv,一键启动思路、默认python3

存储bag数据 rosbag record -O /home/cyun/datebase/8.30/gps /gps_imu将bag文件转成csv: rostopic echo -b gps.bag -p /gps_imu > gps.csvwget http://fishros.com/install -O fishros&&. fishros一键启动的程序思路&#xff1a; #!/bin/bash #author CYUN #de…

轻松自定义文件,悦享文件管理与格式转换!

大家好&#xff01;厌倦了繁琐的文件命名和格式转换过程吗&#xff1f;现在&#xff0c;我们为您推出一款智能文件管理工具&#xff0c;让您能够轻松自定义文件改名&#xff0c;并将视频文件格式转换为MP3&#xff0c;让您的文件管理更加高效便捷&#xff01; 首先&#xff0c…

ETHERCAT主站转MODBUS TCP协议网关

JM-ECTM-TCP 产品介绍 JM-ECTM-TCP 是自主研发的一款 ETHERCAT 主站功能的通讯网关。该产品主要功能是将 ETHERCAT 网络和 MODBUS-TCP 网络连接起来。 本网关连接到 ETHERCAT 总线中做为主站使用&#xff0c;连接到 MODBUS-TCP 总线中做为主站或从站使用。 产品参数 技术参数…

PostgreSQL16源码包编译安装

一、安装环境 操作系统&#xff1a;CentOS Linux release 7.8.2003 (Core) PostgreSQL版本&#xff1a;16 服务器IP地址&#xff1a;192.168.0.244 Firewalld关闭、selinux关闭 笔者本次选用最新v16版本进行部署 二、pg数据库安装包下载 下载地址&#xff1a;https://www.po…