vue3进阶-----单文件组件

news2024/9/24 13:25:23

目录

三.vue3进阶

1.单文件组件

1-1组件定义-重塑经脉,断了?

1-2单文件组件(SFC)-独立日 

1-3Vue-CLI创建项目-锅灶升级

1-4 vuecli选项介绍 

1-5 VueCLI创建项目-风云再起

index.html

main.js 作用

ES6 导入 导出

 解决跨域之“Vue-Cli配置跨域代理“

1-6Vite创建项目-官方推荐

 1-7启动流程&入口文件


三.vue3进阶

1.单文件组件

1-1组件定义-重塑经脉,断了?

组件允许我们将UI划分为独立的、可重用的部分,并且可以对每个部分进行单独的思考。在实际应用中,组件常常被组织成层层嵌套的树状结构:

 


<body>
    <div id="box">
        <kerwin-navbar></kerwin-navbar>
        <kerwin-sidebar></kerwin-sidebar>
        <kerwin-global-button></kerwin-global-button>

    </div>
    <script>
        //扩展html元素, 封装可重用的代码
        var obj = {
            data() {
                return {
                }
            },

        }
        var app = Vue.createApp(obj)
        //定义全局组件
        app.component("kerwin-navbar", {
            //模板
            template: `
                <nav style="background:yellow;">
                    <ul>
                       <li v-for="item in datalist">
                        {{item}}
                       </li>    
                    </ul>
                    <kerwin-global-button></kerwin-global-button>
                    
                </nav>
            `,
            data() {
                return {
                    datalist: ["首页", "新闻", "产品"]
                }
            }
        })

        app.component("kerwin-global-button", {
            template: `<div >
                        <button style="background:blue;">全局</button>    
            </div>`
        })

        app.component("kerwin-sidebar", {
            template: `
                <aside>
                    我是侧边栏
                    <kerwin-global-button></kerwin-global-button>
                    <kerwin-button></kerwin-button>   
                </aside>
            `,
            //局部组件定义
            components: {
                "kerwin-button": {
                    template: `<div >
                        <button style="background:red;">联系</button>    
                    </div>`,
                    // watch ,computed,methods
                }
            }
        })
        app.mount("#box")
    </script>
</body>

 组件带来的好处(1)结构清晰(2)复用性增加(3)封装性

当前写法的吐槽:(1)dom高亮和代码提示没有(2)css只能行内

1-2单文件组件(SFC)-独立日 

Vue的单文件组件(即*.vue文件,英文Single-FileComponent,简称SFC)是一种特殊的文件格式,使我们能够将一个Vue组件的模板、逻辑与样式封装在单个文件中。下面是一个单文件组件的示例:

<script>
export default {
  data() {
    return {
      count: 0
    }
  }
}
</script>

<template>
  <button @click="count++">Count is: {{ count }}</button>
</template>

<style scoped>
button {
  font-weight: bold;
}
</style>

如你所见,Vue的单文件组件是网页开发中HTML、CSS和JavaScript三种语言经典组合的自然延伸。

  • 使用熟悉的HTML、CSS和JavaScript语法编写模块化的组件
  • [让本来就强相关的关注点自然内聚]
  • 预编译模板,避免运行时的编译开销
  • [组件作用域的CSS]
  • [在使用组合式API时语法更简单]
  • 通过交叉分析模板和逻辑代码能进行更多编译时优化
  • [更好的IDE支持],提供自动补全和对模板中表达式的类型检查
  • 开箱即用的模块热更新(HMR)支持

1-3Vue-CLI创建项目-锅灶升级

VueCLI是一个基于Vue.js进行快速开发的完整系统,提供:

通过@vue/cli实现的交互式的项目脚手架。

通过@vue/cli+@vue/cli-service-global实现的零配置原型开发。

一个运行时依赖

@vue/cli-service

可升级;

基于webpack构建,并带有合理的默认配置;

可以通过项目内的配置文件进行配置;

可以通过插件进行扩展。

一个丰富的官方插件集合,集成了前端生态中最好的工具。

一套完全图形化的创建和管理Vue.js项目的用户界面。

VueCLI致力于将Vue生态中的工具基础标准化。它确保了各种构建工具能够基于智能的默认配置即可平稳衔接,这样你可以专注在撰写应用上,而不必花好几天去纠结配置的问题。与此同时,它也为每个工具提供了调整配置的灵活性,无需eject。

下载脚手架

npm install -g @vue/cli
# OR
yarn global add @vue/cli

创建项目

vue create my-project
# OR
vue ui

1-4 vuecli选项介绍 

 

作为学习记录,这里全部选择
Vue CLI v4.5.9
? Please pick a preset: Manually select features
? Check the features needed for your project:
 (*) Choose Vue version
 (*) Babel  //转码器,可以将ES6代码转为ES5代码,从而在现有环境执行。 
 (*) TypeScript // TypeScript是一个JavaScript(后缀.js)的超集(后缀.ts)包含并扩展了 JavaScript 的语法,需要被编译输出为 JavaScript在浏览器运行
 (*) Progressive Web App (PWA) Support // 渐进式Web应用程序
 (*) Router	// 路由
 (*) Vuex	// 状态管理(全局变量管理)
 (*) CSS Pre-processors // css预处理器 :sass 和 less 使用较多
 (*) Linter / Formatter // 代码风格检查和格式化 : ESLint + Prettier 使用较多,
 (*) Unit Testing // 单元测试
>(*) E2E Testing // e2e(end to end) 测试                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

 Choose a version of Vue.js that you want to start the project with (Use arrow keys)
> 2.x
  3.x (Preview) 
? Use class-style component syntax? (Y/n) y   // 是否使用babel做转义
? Use Babel alongside TypeScript (required for modern mode, auto-detected polyfills, transpiling JSX)? (Y/n) y // 是否使用class风格的组件语法
? Use history mode for router? (Requires proper server setup for index fallback in production) (Y/n) n // 是否使用history模式(服务端需要配置路由映射),还是默认hash(地址栏有#符号)
? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default): //选择css预处理的模式
  Sass/SCSS (with dart-sass)
  Sass/SCSS (with node-sass)
> Less
  Stylus 
? Pick a linter / formatter config: // 选择语法检测规范
  ESLint with error prevention only // 只进行报错提醒 
  ESLint + Airbnb config // 不严谨模式
  ESLint + Standard config // 正常模式
> ESLint + Prettier // 严格模式 使用较多
  TSLint (deprecated) // typescript格式验证工具
? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection)
>(*) Lint on save // 使用较多 建议保存即检测
 ( ) Lint and fix on commit  // 提交才检测,此时可能问题已多,事倍功半   
? Pick a unit testing solution: // 各有各自的长处与短处,开发者需要根据当前项目的需求选择
  Mocha + Chai // Mocha是一个能够运行在Node和浏览器中的多功能的JavaScript测试框架,它让异步测试简单且有趣。Mocha连续地运行测试,并给出灵活而精确的报告,同时能够将错误精确地映射到测试用例上。chai 是一个强大的断言库
> Jest // 是facebook推出的一款测试框架,集成了 Mocha,chai,jsdom,sinon等功能,配置较简单
? Pick an E2E testing solution:
  Cypress (Chrome only) // 新一代ui测试框架,类似于selnium,它基于node js,支持webpack构建。
  Nightwatch (WebDriver-based) // 基于Node.js的端到端(e2e)测试方案,使用W3C WebDriver API,将Web应用测试自动化。它提供了简单的语法,支持使用JavaScript和CSS选择器,来编写运行在Selenium服务器上的端到端测试
> WebdriverIO (WebDriver/DevTools based)  // WebDriverIO 是基于一个基于node的网页自动化测试框架,它封装了 Selenium WebDriver API,可拓展性非常高。相比较原生的Selenium 而言,WebDriverIO 的代码非常的简单易懂,api和方法与jquery相似,非常方便前端上手。同时WebDriverIO 也支持mobile端的测试。 
? Where do you prefer placing config for Babel, ESLint, etc.? (Use arrow keys) // 选择配置信息存放位置
> In dedicated config files // 独立文件放置,项目会有单独的几件文件
  In package.json // 统一放置放置
? Save this as a preset for future projects? (y/N) y // 是否保存此配置,方便在以后创建项目中选择使用以上配置
------------------------------------------end----------------------------------------------------
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

1-5 VueCLI创建项目-风云再起

index.html

对vue来说index.html是一个总的入口文件,vue是单页面应用,挂在id为app的div下然后动态渲染路由模板。 会自动引入main.js

在vue 单文件中  每个vue文件状态不相互影响 样式默认是相互影响的 要是想局部影响加scoped

单页面应用是和多页面应用相对而言的。多页面应用是在每次页面跳转的时候,后台服务器都重新生成一张html页面,首屏时间快(只需要加载一次html),搜索引擎优化效果好(html内容都在),但是切换慢(每次页面切换都需要发出一次http请求)。单页面应用首次加载时会请求一次html,随后的页面渲染都依靠js动态的将当前页面的内容清除掉(原理:js可以感知url的变化),然后将下一个页面的内容挂载到当前页面上(前端实现,不是后端,无http发送时延),首屏慢,搜索引擎优化效果差,但是切换快。

main.js 作用

Vue3main.js 的作用是创建 Vue3 应用,并将其挂载到网页中的指定 HTML 的 DOM 容器上。其中包含的主要方法有

  • createApp

createApp 函数用于创建一个 Vue3 应用对象,可以接受一个根组件作为参数,组件通常是使用 Vue.component 函数创建的。createApp 函数返回的对象包含了挂载应用到 DOM 的方法,以及 Vuex 和 Vue-router 等插件的安装方法。

  • App.vue

App.vue 是 Vue3 应用的主组件,它是一个顶层的组件,负责渲染整个应用的界面。在 App.vue 组件中,可以通过 template 或 render 函数来生成 DOM 结构。

  • 3. mount

mount 函数用于将 Vue3 应用对象挂载到指定的 DOM 容器上,需要接收容器的选择器作为参数。它将根据容器的选择器找到相应的 DOM 元素,并将应用渲染到该元素内。

import  {createApp} from 'vue'
import App from './MyApp.vue'

createApp(App)
.mount('#app')

ES6 导入 导出

(1) 默认导出

export default 输出的东西

(2) 默认导入

// 变量名随意,不需要和导出名相同
import 变量名 from ‘路径/包名’
@import url(路径)

(3) 按需导出

export {
变量名1 : 变量值2,
变量名2: 变量值2
...
}

(4) 按需导入

// 变量名必须和导出的变量名相同
import {变量名} from '路经'

(5)区别
[1] 导出数量

  • 默认导出在一个页面只能导出一个变量;
  • 如果在同一个页面写了多个默认导出,结果是仅将最后一个变量导出了;
  • 按需导出可以导出多个变量;

[2] 变量名

  • 默认导入时的变量名不需要和导出时的变量名相同;
  • 按需导入时的变量名必须和导出时的变量名相同;
     
/*
 Vue
 
 //es6 第一种导入导出
 export default {
    createApp:function(){

    }
 }

 import Vue from 'vue'
 Vue.createApp

 //es6 第二种
  function createApp(){}
  export {createApp}


  import {createApp} from 'vue'
*/

在vue项目中 导入不写相对路径 默认从node_modules 包里去找

 解决跨域之“Vue-Cli配置跨域代理“

只要域名端口协议有一个不同,就是跨域了

当下,最流行的就是前后分离开发项目,也就是前端项目和后端接口,并不在一个域名之下,那么前端项目开发时,去访问后端接口就会存在跨域行为。

解决开发环境的跨域问题
开发环境的跨域

开发环境的跨域,也就是在**vue-cli脚手架环境**下开发启动服务时,我们访问接口所遇到的跨域问题,

vue-cli为我们在本地**开启了一个服务,可以通过这个服务帮我们代理请求**,解决跨域问题

vue-cli的配置文件即**vue.config.js**,这里有我们需要的 代理选项

module.exports = {
  devServer: {
    // 代理配置
    proxy: {
        // 这里的api 表示如果我们的请求地址有/api的时候,就出触发代理机制
        '/api': {
          target: 'http://www.baidu.com', // 我们要代理请求的地址
           // 路径重写
          pathRewrite: {
              // 路径重写  localhost:8888/api/login  => www.baidu.com/api/login
              '^/api': '' // 假设我们想把 localhost:8888/api/login 变成www.baidu.com/login 就需要这么做 
          }
      },
    }
  }
}


1-6Vite创建项目-官方推荐

Vite(法语意为"快速的",发音/vit/,发音同"veet")是一种新型前端构建工具,能够显著提升前端开发体验。它主要由两部分组成:

  • 一个开发服务器,它基于原生ES模块提供了丰富的内建功能,如速度快到惊人的模块热更新(HMR)。
  • 一套构建指令,它使用Rollup打包你的代码,并且它是预配置的,可输出用于生产环境的高度优化过的静态资源。

Vite意在提供开箱即用的配置,同时它的插件API和JavaScriptAPI带来了高度的可扩展性,并有完整的类型支持。

 创建项目

Vite 需要 Node.js 版本 14.18+,16+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。

使用 NPM:

$ npm create vite@latest

使用 Yarn:

$ yarn create vite

使用 PNPM:        

$ pnpm create vite

 1-7启动流程&入口文件

我们知道,在script标签中写js代码,或者使用src引入js文件时,默认不能使用module形式,即不能使用import导入文件,但是我们可以再script标签上加上type=module属性来改变方式。

 使用方法如下: 

//module.js
export default function test(){
  return 'test...'
}
// index.js
import test from './module.js';
console.log(test())

 

// index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  // 方法 1 : 引入module.js,然后在script标签里面调用
  <script type="module">
    import test from './module.js';
    console.log(test())
  </script>
 
  // 方法 2 : 直接引入index.js,使用src引入
  <script type="module" src="./index.js"></script>
 
</body>
</html>

 

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

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

相关文章

Vue 自定义ColorPicker

Vue 自定义ColorPicker 创建自定义组件ColorPicker.vue <template><div class"box"><div class"picker-box"><div class"color" :style"{ background: color }"></div><div class"el-icon-arr…

使用元类实现ORM

使用元类实现ORM ORM 是 python编程语言后端web框架 Django的核心思想&#xff0c;“Object Relational Mapping”&#xff0c;即对象-关系映射&#xff0c;简称ORM。 我们想实现的目标是: 创建一个实例对象&#xff0c;用创建它的类名当做数据表名&#xff0c;用创建它的类属…

十分钟实现 Android Camera2 相机拍照

1. 前言 因为工作中要使用Android Camera2 API&#xff0c;但因为Camera2比较复杂&#xff0c;网上资料也比较乱&#xff0c;有一定入门门槛&#xff0c;所以花了几天时间系统研究了下&#xff0c;并在CSDN上记录了下&#xff0c;希望能帮助到更多的小伙伴。 上篇文章 我们使用…

【数据分享】1929-2022年全球站点的逐月平均压力数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 对于具体到监测站点的气象数据&#xff0c;之前我们分享过1929-2022年全球气象…

paddlespeech 声纹识别embedding向量提取;TTS文本合成语音

1、声纹识别embedding向量提取 参考&#xff1a; https://aistudio.baidu.com/aistudio/projectdetail/4353348 https://github.com/PaddlePaddle/PaddleSpeech/blob/develop/demos/speaker_verification/README_cn.md https://aistudio.baidu.com/aistudio/projectdetail/4…

Apache Zeppelin 番外篇——参与开源的得与失

背景 经常在公司做一些业务开发&#xff0c;公司里面由于各种人员流动等问题&#xff0c;导致代码质量也是参差不齐&#xff0c;最终问题就是很难维护&#xff0c;前期还想着能够优化代码&#xff0c;但是大部分时间都是需求都是倒排期&#xff0c;所以也导致不再想进行代码优…

车联网 CAN Bus 协议介绍与数据实时流处理

什么是 CAN Bus&#xff1f; CAN&#xff08;Control Area Network&#xff09;Bus 是一种串行通信协议&#xff0c;能够让设备之间可靠而高效地传输数据。它广泛应用于车辆领域&#xff0c;像神经系统一样连接车辆内部的各个电子控制单元。 CAN Bus 最初由博世公司在 20 世纪…

matlab合并/拼接多个excel表

一、 说明&#xff1a;Excel中数据含有 日期&#xff0c;double如何实现多个表合并 解&#xff1a; path E:\xxx\; namelist dir([path,*.csv]); L length(namelist); a []; for i 1:Lfilename{i} [path,namelist(i).name];bb readtable(filename{i},Range,A1:G2881)…

智能指针

目录 RAII auto_ptr unique_ptr shared_ptr shared_ptr的循环引用 weak_ptr 删除器 智能指针的出现主要是针对程序的资源泄露问题而产生的。 RAII RAII&#xff08;Resource Acquisition Is Initialization)是种利用对象生命周期来控制程序资源的简单技术。 在对象构…

2024考研408-计算机组成原理第四章-指令系统学习笔记

文章目录 前言一、指令系统现代计算机的结构1.1、指令格式1.1.1、指令的定义1.1.2、指令格式1.1.3、指令—按照地址码数量分类①零地址指令②一地址指令&#xff08;1个操作数、2个操作数情况&#xff09;③二地址指令④三地址指令⑤四地址指令 1.1.4、指令-按照指令长度分类1.…

c#泛型类

派生抽象基类 public abstract class cal<T> {public abstract T add(); }public class ab : cal<string> {public override string add(){return null;} }泛型类的静态成员 public class cal<T> {public static int X9; }public class ab : cal<strin…

detr(detection transformer)模型训练自己的数据集

目录 1.detr源码下载 2. 编译配置 3. 编译报错问题 4. 训练过程打印参数解读 1.detr源码下载 GitHub - facebookresearch/detr: End-to-End Object Detection with Transformers 2. 编译配置 编译参数只需要传递数据集路径即可&#xff0c;数据集格式是coco数据集类型 数…

投稿TMC的感受

投稿任务告与段落了&#xff0c;最终的结果是被TMC给early reject了。这神一样的审稿意见让我真的是老头地铁看手机啊&#xff01;所以虽然TMC没有给我rebuttal的机会。所以我还是打算在CSDN进行一次rebuttal。 其实我做的东西很简单&#xff0c;就是把时间序列中的将时间序列转…

FreeRTOS学习笔记—基础知识

文章目录 一、什么是RTOS二、前后台系统三、实时内核&#xff08;可剥夺型内核&#xff09;四、RTOS系统五、FreeRTOS系统简介六、FreeRTOS源码下载 一、什么是RTOS RTOS全称为:Real Time OS&#xff0c;就是实时操作系统&#xff0c;核心在于实时性。实时操作系统又分为硬实时…

git查看/切换远程仓库

文章目录 一、查看远程仓库地址二、切换远程仓库地址三、整体演示 一、查看远程仓库地址 命令&#xff1a; git remote -v二、切换远程仓库地址 命令&#xff1a; git remote set-url <新的远程仓库地址>三、整体演示

pg报错attempted to delete invisible tuple

问题描述 postgresql数据库执行delete报错&#xff1a;attempted to delete invisible tuple&#xff0c;执行同样条件的select不报错 delete from lzltab1; select count(*) from lzltab1;执行全表删除和全表查询的结果&#xff1a; M# delete from lzltab1; ERROR: 5500…

有一个三位数,他的各个位数的阶乘相加得到这个数

有一个三位数,他的各个位数的阶乘相加得到这个数 1.描述 有一个三位数,它的各个位数的阶乘相加得到这个数 2.代码 输入数据 依次对个位&#xff0c;十位和百位进行拆解计算阶乘 然后相加看看是不是和原来的数据是相等 public class Mian4 {public static void main(String[…

ROS系列报错与解决方法

6.28 一、问题描述 ROS运行roscore命令后发现提示log文件(日志文件)大小超过1G,需要清理 Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt WARNING: disk usage in log directory [/home/wht/.ros/log] is over 1GB. Its recom…

红外线探测防盗报警器电路设计

该报警器能探测人体发出的红外线&#xff0c;当人进入报警器的监视区域内&#xff0c;即可发出报警声&#xff0c;适用于家庭、办公室、仓库、实验室等比较重要场合防盜报警。 一、电路工作原理 电路原理如图4所示。 该装置由红外线传感器、信号放大电路、电压比较器、延时…

这可能是最简单的Page Object库

做过web自动化测试的同学&#xff0c;对Page object设计模式应该不陌生。 Page object库应该根据以下目标开发&#xff1a; Page object应该易于使用 清晰的结构 PageObjects 对于页面对象 PageModules对于页面内容 只写测试&#xff0c;而不是基础。 在可能的情况下防止样…