【vue系列-07】vue脚手架的基本使用

news2024/7/6 19:01:08

深入理解脚手架的使用

  • 一,vue脚手架的基本使用
    • 1,vue-cli安装
    • 2,vue项目中的文件组成
    • 3,render配置项
    • 4,ref属性
    • 5,props属性
    • 6,mixin属性
    • 7,scope属性

一,vue脚手架的基本使用

在使用这个vue的脚手架时,优先使用vue脚手架的最新版本,目前是使用5.x的版本。其官网如下:https://cli.vuejs.org/zh/

1,vue-cli安装

1,在使用这个脚手架之前,需要先全局安装这个脚手架,全局安装之后以后就可以不用再安装了,当然哪些nodejs,淘宝镜像之类的,需要提前安装好。

//安装淘宝镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org
//安装全局vue的脚手架
npm install -g @vue/cli

2,切换到要创建脚手架的目录,然后在指定目录创建项目名称,我这边是切换到E盘下面,然后输入下面的创建一个项目

vue create vue_test

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dMG9qhXX-1674020947050)(img/1673919038769.png)]

并且在选择这个脚手架的版本时,这里先选择这个vue 2的版本。

3,随后进入刚刚创建的文件夹,并且运行这个服务

cd vue_test
npm run serve

4,回车之后,就可以看到下面这个页面,就可以通过这个localhost:8080访问了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vV2uLKxy-1674020947052)(img/1673919318910.png)]

5,接下来就到了这个默认的页面

在这里插入图片描述

2,vue项目中的文件组成

用vscode打开这个项目之后,其主要由以下的一些文件组成,package.json就是一个包的管理器,管理者各个组件的版本等,之后安装的所有的组件都可以在这个里面看到相应的版本

在这里插入图片描述

接下来就是重点分析这个src下面的几个文件,首先是这个入口文件main.js文件,在运行这个 npm run serve 之后,就会立马的运行这个main.js文件

//该文件是整个项目的入口文件

//引入vue
import Vue from 'vue'
//引入App组件,是所有组件的父组件,也是vm的子组件
import App from './App.vue'
//关闭vue的生产提示
Vue.config.productionTip = false

//创建vue的实例对象
new Vue({
  //将app组件放入容器中
  render: h => h(App),
}).$mount('#app')

接下来就是这个assets这个文件夹,里面存放的都是一些静态资源文件

接下来就是这个App.vue文件,之后所有编写出来的这个组件都要存放在这个components里面,只有这个App.vue放在这个components文件夹的外面。

<template>
  <div id="app">
    <HelloWorld msg="Welcome to Your Vue.js App"/>
  </div>
</template>
 
<script>
	import HelloWorld from './components/HelloWorld.vue'
    export default {
      name: 'App',
      components: {
        HelloWorld
      }
    }
</script>

<style>
</style>

接下来再查看这个src上面的这个文件夹,public的这个文件夹,里面就是可以存放一些html的文件,如public下面的这个index.html文件,就是vue实例对应的容器。

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <!-- 针对IE浏览器的一个配置,让IE浏览器以最高的渲染级别渲染页面 -->
    <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>
  	<!-- 不支持标签中的元素时,所展示的东西 -->
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

执行流程总结: 先执行这个npm run serve,随后来到了这个src目录下面的这个main.js文件,随后在这个main文件中引入了Vue,App,随后再引入这个App,再将App中引入的其他子组件全部加载到,最后通过这个render将组件放入容器中。

3,render配置项

在这个main.js文件中,有一个配置项render,可以将这个App组件放入到对应的容器中,接下来主要分析一下这个render的底层原理

//创建vue的实例对象
new Vue({
  //将app组件放入容器中
  render: h => h(App),
}).$mount('#app')

这个js文件中引入的这个vue是一个不完整的vue,它内部缺少了一个模板解析器,不是一个完整的vue,那么如果直接像之前一样的引入template的这个模板,那么就会因为缺少模板解析器而不能解析这个模板,那么会直接报错。

//引入vue
import Vue from 'vue'

当然也可以直接将这个vue替换成完整的vue,但是会让文件比较大,也不推荐直接使用完整版的vue

import Vue from 'vue/dist/vue'

那么就不能直接使用这个模板template,而是得使用这个render来解析和渲染这个模板

render(createElement){
    return createElement('h1','hello'}
//简化
reader createElement => return createElement('h1','hello')

这样不管用的是精简版还是完整版,都可以使用这个render,通过这个render来解析模板

4,ref属性

在脚手架中,在获取Dom元素时,可以利用这个ref属性代替之前的id或者name属性,从而获取到对应的DOM元素,并且通过这个关键字$refs获取值

<template>
  <div>
    <button ref="btn" @click="showDom">点我</button>
    <School ref="sch"/> 
  </div>
</template>

<script>
import School from './components/School.vue'
export default {
	name: 'App',
	components: {School},
    methods:{
        showDom(){
            console.log(this.$refs.btn)
            console.log(this.$refs.sch)
        }
    }
}
</script>

如果不是组件使用这个属性,那么这个this指向的就是当前这个vc,并且获取到的是一个真实的DOM元素

如果是组件使用这个属性,那么这个this就是指向利用这个属性的组件,并且获取到的就是组件对应的实例对象

5,props属性

这个属性主要用来实现组件复用,并且这个数据是动态的。比如说在这个父组件中,使用学生这个子组件,其代码如下:在这个components目录下面新建一个Student.vue的子组件,然后为了方便这个学校的属性时动态的,就是由外部传进来的,那么就利用这个props来接收数据

<template>
    <div>
        <h1>我是一名学生</h1>
        <h2>姓名:{{ name }}</h2>
        <h2>年龄:{{ age }}</h2>
        <h2>性别:{{ sex }}</h2>
    </div>
</template>

<script>
    export default {
        name:'Student', 
        data(){
            return{
                 我是一名学生
            }
        },
        // 简单写法
        props:['name','age','sex']
    }
</script>

这个为App.vue组件,假设上面的这个Student子组件直接注册在这个App组件中,那么这个App组件就可以展示子组件的东西,并且在使用这个Student子组件时,传入对应的参数。需要注意的就是如果属性是一个整形,那么需要在属性前面加一个 :

<template>
  <div id="app">
    <Student name="张三" :age="18" sex = "男"></Student>
  </div>
</template>

<script>
  import Student from './components/Student';
  export default {
    name: 'App',
    components: {
      Student
    }
  }
</script>

除了上面的这个简单写法,还有下面两种写法,一个是对象式,并且声明每个属性对应的类型

props:{
    name:String,
    age:Number,
    sex:String
}

当然还有一种也是这个对象式,除了给每个字段限制对应的类型之外,还给对应的字段一个默认值,最多的肯定是使用这种方式

props:{
    name:{
        type: String,
        required: true
    },
    age:{
        type: Number,
        default: 18
    },
    sex:{
        type: String,
        required: true
    }
}

并且这些由外部传进来的值,不允许被修改。并且这个props的优先级比data高,如果一定要修改这个值,那么可以在这个data中重新定义一个属性用于接收这个要被修改的值,然后再去修改这个新增的重新定义的值,这样就可以实现这个数据的修改,类似于增加一个主键变量。

6,mixin属性

其原理就类似于将重复性的代码抽取出来,然后封装到一个js文件中,最后大家再引入这个js,这样所有的的组件都可以复用这一段代码了。

如编写一个mixin的js文件

export const mixin = {
    data(){
        return{
            x : 1,
            y : 2
        }
    }
} 

那么在这个Student.vue的组件中,就可以引入这个js文件

import { mixin } from '../mixin'

最后再这个父组件中加入这个属性mixins,该属性和data平级,并且值是一个数组

mixins:[mixin]

但是如果在data中也存在和这个mixin.js中相同的变量名,如data中都有这个x,那么data中的优先级高。如果是mounted这个钩子函数的话,那么两个都要。

也可以直接使用这个全局混合,直接在这个App.vue中,加入这个混合属性,这样所有的vm和vc都可以使用这个混合了。

import { mixin1,mixin2,mixin3 } from '../mixin'
Vue.mixin(mixin1)
Vue.mixin(mixin2)
Vue.mixin(mixin3)

7,scope属性

这个就是在这个style样式中使用,就是说如果不加的话,那么这个style是一个全局的,那么就有可能出现名字冲突的问题,要是加一个作用域,那么就可以直接解决这个命名冲突的问题了。

<style scope>
	...
</style>

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

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

相关文章

vsftpd使用指北

vsftpd使用指北 文章目录vsftpd使用指北1.安装vsftpd2.登录3.切换本地路径下载命令&#xff1a;get用于下载单个文件&#xff1a;mget用于批量下载&#xff1a;上传命令&#xff1a;FilezillaReferencevsftpd 是“very secure FTP daemon”的缩写&#xff0c;是一个完全免费的、…

Vue组件化

1、Vue组件化开发思想 1.1、认识组件化开发 组件化也是类似的思想&#xff1a; 如果我们将一个页面中所有的处理逻辑全部放在一起&#xff0c;处理起来就会变得非常复杂&#xff0c;而且不利于后续的管理以及扩展&#xff1b;但如果&#xff0c;我们讲一个页面拆分成一个个小…

【算法竞赛学习】csoj:寒假第一场

文章目录前言新年礼物灯笼展摩天楼神抽新年大礼前言 由于本人菜鸡&#xff0c;所以大多都是使用出题人的代码和思路 如有侵权&#xff0c;麻烦联系up删帖&#xff0c;本贴仅作为笔记记录 本篇大多是在吹水&#xff0c;技术方面可以直接看代码注释&#xff0c;思路在水文中&am…

Linux下的进程通信之管道通信

目录 进程间通信的背景 为什么要进行进程间通信&#xff1f; 管道 什么是管道&#xff1f; 匿名管道 匿名管道原理 如何创建匿名管道&#xff1f; 命名管道 进程间通信的背景 进程间通信就是在不同的进程之间进行的数据的交换&#xff0c;进程间通信又称为Interproces…

Python SciPy 空间数据

SciPy 空间数据空间数据又称几何数据&#xff0c;它用来表示物体的位置、形态、大小分布等各方面的信息&#xff0c;比如坐标上的点。SciPy 通过 scipy.spatial 模块处理空间数据&#xff0c;比如判断一个点是否在边界内、计算给定点周围距离最近点以及给定距离内的所有点。三角…

【学Vue就跟玩一样】组件的自定义事件和全局事件总线

一&#xff0c;自定义事件1.自定义事件是什么自定义事件一种组件间通信的方式&#xff0c;适用于 子组件 ——> 父组件传输数据等2.要在什么地方使用若App是父组件&#xff0c;School是子组件&#xff0c;School想给App传数据&#xff0c;那么就要在App中给School绑定自定义…

使用k8s实现灰度发布,金丝雀,蓝绿发布

介绍#Ingress-Nginx 是一个K8S ingress工具&#xff0c;支持配置 Ingress Annotations 来实现不同场景下的灰度发布和测试。 Nginx Annotations 支持以下 4 种 Canary 规则&#xff1a;nginx.ingress.kubernetes.io/canary-by-header&#xff1a;基于 Request Header 的流量切分…

ThreadLocal底层原理

ThreadLocal底层原理一&#xff1a;什么是ThreadLocal二&#xff1a;理解ThreadLocal中的内存泄漏问题三&#xff1a;ThreadLocalMap中的Hash冲突处理四&#xff1a;可以被继承的ThreadLocal——InheritableThreadLocal一&#xff1a;什么是ThreadLocal ThreadLocal是一个创建…

【电脑故障】PIN无效,显示无用户配置文件

【电脑故障】PIN无效。显示无用户配置文件1. 电脑情况&#xff1a;2. 解决方法&#xff08;个人&#xff09;&#xff1a;2.1 解决登录问题2.2 解决PIN可用设置1. 电脑情况&#xff1a; 电脑品牌&#xff1a;联想小新pro13操作系统&#xff1a;win10 2. 解决方法&#xff08;…

C++初阶--stack和queue

目录 stack介绍 stack的使用 stack的模拟实现 queue的介绍 queue的使用 queue的模拟实现 deque priority_queue priority_queue的使用 仿函数 priority_queue的模拟实现 stack介绍&#xff1a; stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环…

Nginx使用(三)配置实例

一、反向代理示例一效果&#xff1a;打开浏览器&#xff0c;在浏览器地址栏输入地址www.123.com&#xff0c;跳转到linux系统tomcat主页面中具体实现&#xff1a;&#xff08;1&#xff09; 准备&#xff1a;安装nginx在linux系统安装tomcat,使用默认端口8080解压之后进入到tom…

一篇文章读懂mybatis-plus原理和CRUD接口

Myabtis-Plus配置 MybatisPlus官网 官方文档上有详细的spring boot配置mybatis-plus的教程&#xff0c;此处就不在详细赘述。 mybatis-plus是基于spring完成的只能再spring相关应用上实现。 引入父工程 注意mybatis-plus和spring boot的版本匹配不然会出现 推荐版本 <pa…

自媒体神器 Previs Shot 使用指南

Previs Shot 是一款影视创作的项目管理工具&#xff0c;更高效的方式开始您的影视创作历程。分镜表分镜表可高效绘制画面、编写景别、运镜、内容、台词等&#xff0c;甚至可以填写摄影器材、灯光等信息。分镜结构场景&#xff1a;电影里比如过生日、开party都是不同的场景&…

【程序员陪你过大年】html+css+js 实现动态新年烟花特效及服务器部署

前言 不知不觉又到了年底&#xff0c;这一年是值得庆贺的一年&#xff0c;疫情过去&#xff0c;经济好转。我们急需在春节这个特殊的日志释放下自己的情绪。但是大部分地区都不让放炮&#xff0c;于是乎我为大家带来一套十分炫酷应景的春节烟花动画代码实现。效果如下图所示 :…

【如何在Linux下使用Git命令在Gitee上创建项目】

目录 1 创建仓库 2 Git提交三板斧 2.1 add 2.2 commit 2.3 push 1 创建仓库 首先我们可以使用命令&#xff1a;git --version 来查看是否下在了git,没有下载的可以使用下面的命令安装&#xff1a; sudo yum install -y git 成功后就可以查看了&#xff1a; [grmVM-8-12-…

深度学习目标检测_YOLOV3超详细解读

文章目录YOLO V3概述网络结构backbone&#xff1a;darknet-53特征细化&#xff08;多scale&#xff09;残差连接残差网络的发家史先验框softmax改进YOLO V3概述 yolo v3论文地址&#xff1a;https://pjreddie.com/media/files/papers/YOLOv3.pdf 先说说yolo v3的效果&#xff…

字节青训营Go语言学习第二天-Go语言进阶与依赖管理

文章目录并行VS并发GoroutineCSPChannel并发安全LockWithGroupGo依赖管理GoPathGo VendorGo Module依赖分发-回源并行VS并发 并发指的是多线程在一个CPU上运行&#xff0c;而并行是直利用多核来实现多线程。 内核是系统里比较昂贵的系统资源&#xff0c;它的创建、切换停止都是…

K8s可视化界面Kubernetes DashboardKuboard

目录一、简介二、Kubernetes Dashboard2.1 部署dashboard2.2 访问UI2.3 创建访问账号三、Kuboard3.1 部署2.2 访问UI一、简介 本文给大家介绍两个K8s集群的可视化工具 Kubernetes Dashboard 和 Kuboard 二、Kubernetes Dashboard 2.1 部署dashboard dashboard Github地址&a…

【算法基础(2)】二分查找和斐波那契数列

二分查找 二分查找高效的前提是数据结构是有序的 思路&#xff1a; 1.排序 2.将数组折半&#xff0c;分成左右两个数组。 3.判断要查找的数和中间位置数值的大小&#xff0c;来判断要查找的数实在哪一半。 4.之后继续折半查找&#xff0c;直至找到这个数。 图解&#xff1a; 首…

SpringMVC看这一篇文章就够了

第一章 SpringMVC的简介 Spring框架版本 4.3.29.RELEASE SpringMVC是什么 1 2 3 4 5 61. Spring家族的一个部分 2. 是JavaWeb三层架构中控制器层的解决方案 3. 是基于MVC思想的框架-- Model-- View-- ControllerSpringMVC知识点大纲SpringMVC功能简述 1 2 3 4 5 6 7 8 9 101. 作…