Vue-组件开发(上)

Vue开发 这个错误提示表明在使用 npm 安装依赖时遇到了证书过期的问题。这可能是由于 npm 使用的证书过期导致的。是一种新的语法糖,用于简化组件的编写。它使得组件的逻辑更加清晰,并且减少了样板代码。是否使用 history 模式的路由,按需选 Y 或者 n。选择安装 Router、Vuex 插件。按照自己的需求模块进行安装。是否记住上面的选择项:否。选择 Vue3 版本。后面的选项都默认即可。在 Vue 3 中, 阅读详情

Vue-组件开发(上)

1.什么是组件化开发

组件化开发指的是:根据封装的思想,把页面上可重用的UI结构封装为组件,从而方便项目的开发和维护

2.Vue中的组件化开发

组件就是对UI结构的复用
vue是一个支持组件化开发的前端框架
vue中规定:组件的后缀名为 .vue 在我们通过Vue-cli创建的项目里面,有一个App.vue文件,该文件的本质上就是一个Vue的组件。

3.Vue组件的三个组成部分

每个 .vue 组件都由3部分组成,分别是:

  • template -> 组件的模板结构
  • script -> 组件的JavaScript行为
  • style -> 组件的样式
<template>
  <div class="box">
      <h3>{{username}}</h3>
  </div>  
</template>
<script>
//默认导出 固定写法
export default{
    //data 数据源
    //组件里面的data不能指向对象
    //组件中的data必须是一个函数
    data(){
        //这个return 出去的 { } 中,可以定义数据
        return {
            username:'zh'
        }
    }
}
</script>
<style>
    .box{
        background-color: aquamarine;
    }
</style>

在这里插入图片描述

3.1在组件中定义methods方法

methods方法的定义与在html文件里面定义的一样,与data方法

<template>
  <div class="box">
      <h3>{{username}}</h3>
      <button @click="btn">点击修改</button>
  </div>  
</template>
<script>
//默认导出 固定写法
export default{
    //data 数据源
    //组件里面的data不能指向对象
    //组件中的data必须是一个函数
    data(){
        //这个return 出去的 { } 中,可以定义数据
        return {
            username:'zh'
        }
    },
    methods: {
        btn(){
            //在组件中this就表示当前组件的实例对象
            this.username='zhanghan'
            console.log(this);
        }
    },
}
</script>
<style>
    .box{
        background-color: aquamarine;
    }
</style>
3.2 在Vue组件中启用less语法

如果在组件里面对样式的修改需要用到less语法,只需要在

<template>
  <div class="box">
      <h3>{{username}}</h3>
      <button @click="btn">点击修改</button>
  </div>  
</template>

<script>
//默认导出 固定写法
export default{
    //data 数据源
    //组件里面的data不能指向对象
    //组件中的data必须是一个函数
    data(){
        //这个return 出去的 { } 中,可以定义数据
        return {
            username:'zh'
        }
    },
    methods: {
        btn(){
            //在组件中this就表示当前组件的实例对象
            this.username='zhanghan'
            console.log(this);
        }
    },
    //当前组件中的侦听器
    watch:{

    },
    //当前组件中的计算属性
    computed:{

    },
    //当前组件的过滤器
    filters:{

    }
}
</script>

<style lang="less">
    .box{
        background-color: aquamarine;
        h3 {
            color: red;
        }
    }
</style>

在这里插入图片描述

4.组件之间的父子关系

组件在被封装好之后,彼此之间是相互独立的,不存在父子关系
在这里插入图片描述

在使用组件的时候,根据彼此的嵌套关系,形成了父子关系、兄弟关系
在这里插入图片描述

4.1使用组件的三个步骤

当我们想要再APP.vue文件中用到Left.vue和Right.vue组件,则需要按照下面步骤来进行:
步骤一:使用import语法导入需要的组件
步骤二:使用components节点注册组件
**步骤三:**以标签形式使用刚才注册的组件
我们在步骤一导入组件名字的时候可以是任意名字,但是要和components里面注册时要同步你在步骤一里面接收的组件名字

<template>
  <div class="#app-container">
    <h1>App 根组件</h1>
    <hr/>
    <div class="box">
      <!-- 渲染 Left Right 组件 -->
      <Left></Left>
      <Right></Right>
    </div>
  </div>
</template>

<script>
//1.导入需要的 .vue 组件
import Left from '@/components/Left.vue'
import Right from '@/components/Right.vue'

export default {
    //2.注册组件
    components: {
        Left,
        Right
    },
}
</script>

<style lang="less">
.app-container{
  padding: 1px 20px 20px;
  background-color: #efefef;
}
.box{
  float: left;
}
</style>

在这里插入图片描述

4.2私有组件和全局组件

私有组件
当我们在components下注册组件后,该组件称为私有子组件,当我们其他的组件想去使用该组件便都需要去注册该组件
例如:
在组件A的components节点下,注册了组件F
则组件F只能用在组件A中,不能被用在组件C中。
因此我们需要利用全局组件来方便我们多次的使用
全局组件
在Vue项目里的main.js入口文件中,通过**Vue.component()**方法,可以注册全局组件,语法格式:

//导入需要全局注册的组件
import Count from '@/components/Count.vue'
//参数1:字符串格式,表示组件的"注册名称"
//参数2:需要被全局注册的那个组件
Vue.component('MyCount',Count)

当我们注册好后,只需要在需要的组件页面内通过标签的方式就可以直接利用该组件

<template>
    <div class="box2">
        <span>Left组件</span>
        <hr/>
        <MyCount></MyCount>
    </div>
</template>

<script>
export default{

}
</script>

<style lang="less">
.box2{
    width: 400px;
    height: 200px;
    background-color: red;
}
</style>

在这里插入图片描述

5.组件里面的 props

props是组件的自定义属性,在封装通用组件的时候,合理的使用props可以极大地提高组件的复用性
语法格式:

export default{
    //组件的自定义属性 属性可以为任意属性
    props:['自定义属性A','自定义属性B'...],//数组
    //组件的私有数据
    data(){
        return {

        }
    }
}

案例:自定义按钮点击的初始值
利用Left.vue使用全局组件Count.vue,通过按钮使自定义的初始值增加

<!-- Count 组件 -->
<template>
    <div>
        <h5>Count 组件</h5>
        <p>count 的值为:{{init+count}}</p>
        <!-- 当methods:{ }里面的事件函数执行语句只有一行时,我们可以在methods里面直接省略  -->
        <button @click="count +=1">按钮</button>
    </div>
</template>

<script>
export default {
    //props 是自定义属性,允许使用者通过自定义属性,为当前组件指定初始值
    props:['init'],
    data() {
        return {
            count:0
        };
    },
};
</script>
<!-- Left 组件 -->
<template>
    <div class="box2">
        <span>Left组件</span>
        <hr/>
        <!-- 正常传入的的初始值为一个字符串 我们如果需要转换成数值 则需要加上 : -->
        <!-- 我们都知道 v-bind 里面写的是JS 所以我们输出的是一个数字 9 如果不加 v-bind 则输出一个字符串 "9" -->
        <MyCount :init="9"></MyCount>
    </div>
</template>
<script>
export default{

}
</script>

<style lang="less">
.box2{
    width: 400px;
    height: 200px;
    background-color: rgb(255, 191, 0);
}
</style>

在这里插入图片描述

因此我们发现props里面的数据也可以拿到页面中去渲染数据
注意:在我们没有使用v-bind之前所绑定的值是一个字符串,当我们使用了v-bind后" "内的语句将会变成JS脚本语句

5.1props 是只读的

Vue规定:组件中封装的自定义属性是只读的,我们不能直接修改props的值,否则会直接报错
在这里插入图片描述

我们在上述的案例中实际上是希望count的数值进行增长,但是我们在调试工具里发现最终结果并不是count的值
如果我们想修改props的值,可以把props的值转存到data中,因为data中的值是可读可写的
因此我们可以将上述案例作出修改

<!--只需要修改 Count 组件-->
<template>
    <div>
        <h5>Count 组件</h5>
        <p>count 的值为:{{count}}</p>
        <!-- 当methods:{ }里面的事件函数执行语句只有一行时,我们可以在methods里面直接省略  -->
        <button @click="count +=1">按钮</button>
        <button @click="show">打印this</button>
    </div>
</template>

<script>
export default {
    //props 是自定义属性,允许使用者通过自定义属性,为当前组件指定初始值
    props:['init'],
    data() {
        return {
            count:this.init// 我们可以利用this.init 将值转存到 count里面
        };
    },
    methods: {
        show(){
            console.log(this);
        }
    },
};
</script>

在这里插入图片描述

5.2 props的default默认值

在声明自定义属性时,可以通过default来定义属性的默认值
示例代码:

export default {
    props:{
        init:{
            // 用default属性定义属性的默认值
            default:0
        }
        //自定义属性A:{/配置项A/},
        //自定义属性B:{/配置项B/},
        //自定义属性C:{/配置项C/},
    }
}

我们可以将上述案例在稍作调整
当我们的Left.vue的MyCount组件定义了init的初始值,default将会被覆盖
当Right.vue没有定义初始值,default将生效

<template>
    <div>
        <h5>Count 组件</h5>
        <p>count 的值为:{{count}}</p>
        <!-- 当methods:{ }里面的事件函数执行语句只有一行时,我们可以在methods里面直接省略  -->
        <button @click="count +=1">按钮</button>
        <button @click="show">打印this</button>
    </div>
</template>
<script>
export default {
    //props 是自定义属性,允许使用者通过自定义属性,为当前组件指定初始值
    props:{
        init:{
            //如果外界使用Count组件的时候,没有传递 init 属性,则默认值生效
            //如果用户传了则会被覆盖掉
            default:0
        }
    },
    data() {
        return {
            count:this.init// 我们可以利用this.init 将值转存到 count里面
        };
    },
    methods: {
        show(){
            console.log(this);
        }
    },
};
</script>

在这里插入图片描述

5.3 props的type值类型

在声明自定义属性时,可以通过type来定义属性的值类型。示例代码如下:

export default{
    props:{
        inti:{
            //用 default 属性定义属性的默认值
            default:0,
            //用 type 属性定义属性的值类型
            //如果传递过来的值不符合此类型,则会在终端报错
            type:Number
        }
    }
}
5.4 props的required必填项

required必填项是专门用来校验我们的自定义属性的默认值类型
语法格式:

export default{
    props:{
        inti:{
            //用 default 属性定义属性的默认值
            default:0,
            //用 type 属性定义属性的值类型
            //如果传递过来的值不符合此类型,则会在终端报错
            type:Number,
            //必填项校验
            required:true
        }
    }
}

就比如我们在Left.vue里面MyCount组件标签里面的 init 初始值没有利用v-bind绑定,则他的默认值将会是变成字符串,如果我们在Count.vue全局组件里面的将默认值设置为Number,此时终端将会报错

总结

我们之所以用到props是为了提高组件的复用性,当我们封装了一个共享组件时,每一个组件在使用这个组件时都希望能够传入自己的初始值,因此我们此时可以用到props,在porps里面定义一个init属性,用户可以自定义的去定义init的初始值来传入到props里面的init

Vue 组件开发 / 局部注册(父组件)import MyComponent from './MyComponent.vue';// 全局注册(main.js)import MyComponent from './MyComponent.vue';// 子组件this.$emit('update', { id: 1, data: '...' });动态导入组件:components: { A: () => import('./A.vue') }。使用 v-bind.sync 或 Vue 3 的 v-model 双向绑定。 阅读详情

相关推荐

Vue从入门到精通:全方位掌握Vue.js开发技能

Vue.js(通常简称为 Vue)是一套构建用户界面的渐进式JavaScript框架。与其他重量级框架不同,Vue 采用了自底向上增量开发的设计。Vue 的核心库只关注视图层,非常容易学习,并且可以轻松与其他库或已有项目集成。Vue 允许开发者自定义指令,这些指令可以在模板中以v-自定义指令名的形式使用。el.focus();});在上面的例子中,我们创建了一个名为 focus 的自定义指令,当绑定的元素被插入到 DOM 中时,该指令会自动聚焦到该元素。

邓邓子的博客 9553

vue开发项目

vue创建项目

程序员一博 3951

Vue - 快速入门,这一套就够了!(Vue core + 案例 + 效果演示)

前置条件:掌握 HTML、CSS、JavaScript、AJAX.工具:VsCode.插件:Live Server(浏览器实时预览)Ps:建议都提前下载下来,没网的时候也能用.

CYK_byte的博客 4万+

Vue 父子组件应用指南:从基础到实战

Vue.js 是一种流行的 JavaScript 框架,用于构建用户界面。其中,父子组件的概念是 Vue 开发中非常重要的一部分。本文将介绍如何使用 Vue 创建父子组件,并通过代码来分析实际应用。

weixin_43749805的博客 4401

从Gotham到Foundry:一文读懂Palantir三大产品线(Gotham/Foundry/Apollo)的核心差异与适用场景

本文深度解析Palantir三大产品线Gotham、Foundry和Apollo的核心差异与适用场景。Gotham专为国防与情报设计,提供军事级安全分析;Foundry是企业数字化转型的通用平台,支持低代码开发;Apollo则是云原生基石,确保系统可靠运行。通过对比产品架构与典型应用,帮助技术决策者根据需求做出明智选择。

weixin_42524499的博客 839

洛谷P5707 【深基2.例12】上学迟到(c语言)

第一篇题解 题目描述 yyy 的学校要求早上 8 点前到达。学校到 yyy 的家一共有 s(s\le 10000)s(s≤10000) 米,而 yyy 可以以 v(v<10000)v(v<10000) 米每分钟的速度匀速走到学校。此外在上学路上它还要额外花 10 分钟时间进行垃圾分类。请问为了避免迟到 yyy 最晚什么时候出门?输出 HH:MM 的时间格式,不足两位时补零。由于路途遥远, yyy 可能不得不提前一天出发,不过不可能提前超过一天。 输入格式 两个正整数 s,v,意思已经在题目中给定

cc_love_program的博客 1万+

vuejs组件化开发

vuejs 组件化 之前学习的都是属于 vuejs 基础语法,今天学习一个稍微高阶一点的知识: vuejs 组件化开发 什么是组件化开发? 组件化开发是近两年流行起来的一个开发模式,会把我们日常项目开发中一些常用的代码块封装起来,封装成一个一个的功能块,这个功能块里面包含了 结构、样式、行为、数据(state)、生命周期等。然后在做项目开发时候,项目的那些页面就由这些小的组件然后进行构成,类似乐高积木。 网站:(网页—>组件—>封装代码块) 常见的可以复用的代码: 按钮 弹出框 模态框 b

luvzen0127的博客 516

LK32T102 单片机 操作GPIO实现流水灯(1)

前言: LK32T10232(32位)单片机是一款专为电机控制器和数字电源开发的高性能 MCU。采Cortex-M0 内核,最高工作频率可达 72Mhz,ADC 采样速率 达 1Msps。同时具备协处理器单元可满足各种乘法、除法、移位以及各种 复杂函数运算。 LK32T102(32位)支持单电源供电,且内嵌高精度高速及低速振荡器,以及具备 多种低功耗工作模式。同时,集成了多路增强型 PWM,多通道模拟比较 器和高速运算放大器,可满足多种电机及功率控制应用,并简化系统成本。...

qq_58676187的博客 3189

Vuejs组件化开发

组件化开发01-组件化开发01-组件化开发的基本使用02-全局组件和局部组件03-父组件和子组件04-组件的语法糖注册方式05-组件模块的分离写法06-组件中的数据存放问题07-组件通信-父组件向子组件传递参数08-组件通信-子组件向父组件传递事件 01-组件化开发 01-组件化开发的基本使用 组件使用的三个步骤: 创建组件构造器 注册组件 使用组件 <div id="app"> <!-- 3 使用组件--> <my-cpn></my-cpn>

gets_s的博客 255

在 Kubernetes 上部署 Label Studio

Label Studio 是一款开源的数据标注工具,支持多种标注任务,如文本标注、图像标注、音频标注等。

啥都会一点 668

stm32h743的hrtim使用生成pwm波

HRTIM(High-Resolution Timer)是一种高精度定时器,其时钟频率可直接与CPU主频同步,达到480MHz。相比之下,其他传统定时器需挂载在APB总线上,受总线频率限制,最高仅支持240MHz。这种直接时钟同步机制显著提升了定时器的分辨率和精度。

d13211322的博客 1610

Vue 组件化开发

Vue 组件化开发 提示: 本次分享知识点基于 vue.js,需要对 vue.js 有一定的了解。 什么叫做组件化 vue.js 有两大法宝,一个是数据驱动,另一个就是组件化,那么问题来了,什么叫做组件化,为什么要组件化?接下来我就针对这两个问题一一解答,所谓组件化,就是把页面拆分成多个组件,每个组件依赖的 CSS、JS、模板、图片等资源放在一起开发和维护。 因为组件是资源独立的,所以组件在系统内...

花神的博客 3万+

KEIL 5.38如何手动安装ARM Compiler V5?完整配置流程分享

本文详细介绍了在KEIL 5.38环境下手动安装和配置ARM Compiler V5(AC5)的完整流程,解决历史遗留项目的兼容性问题。从获取安装包、环境变量设置到KEIL集成配置,逐步指导开发者完成AC5的部署,并提供了常见错误排查和性能优化建议,帮助开发者高效维护基于C编译器的老项目。

weixin_29168813的博客 626

Vue深入-14【VueJS矫正组件化开发方式】

(1).工程化项目 通过下面得命令进行初始化 (2).开发步骤 1.获取数据 获取数据得三种方式: axios fetch jquery ajax 2.ajax封装 二次封装ajax,且做成数据请求层 3.Vue组件

Yesterday_Tomorrow的博客 188

华为OD机试双机位C卷-开心消消乐(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【开心消消乐】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为od机试 - 开心消消乐。

qq_45776114的博客 1512

Microsemi Libero系列教程(全网首发)

关于Libero IDE和Libero SoC Libero分为Libero IDE和Libero SoC,Libero IDE最新版本是v9.2 SP3(2016年4月4日)已经不再更新维护了,而Libero SoC是Libero IDE的升级版,官方推荐的开发工具,文中的Libero指的是Libero SoC。 Libero SoC Libero® SoC是Microsemi(美高森美)官方...

whik1194的博客 2万+

vue tab切换_基于Vuejs和Bulma开发的新兴开源UI组件库——Vue-Blu

介绍Vue-Blu是基于Vuejs和Bulma开发的开源UI组件库。旨在为PC端的前端开发(特别是中后台产品)提供一个快速且灵活的解决方案。Bulma是一个基于Flexbox的免费开源CSS框架,已有200,000多名开发人员使用;笔者曾经也介绍过这一款css框架,目前star数已突破38.9k,确实是一个非常受欢迎的纯css框架项目地址vue-bluhttps://github.com/chen...

weixin_39631295的博客 426

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Vue组件开发指南

Vue组件开发指南

唯见青山不见君 5516

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Vue、Vuejs从入门到精通 | 组件化开发

学习视频来源:B站《Vue、Vuejs从入门到精通》 个人在视频学习过程中也同步完成课堂练习等,现将授课材料与个人笔记分享出来。 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"> <!-- 1..

团爸讲算法 1297

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Vue.js分页组件vuejs-paginate常见问题解答:开发者必看的10个实用技巧

Vue.js分页组件vuejs-paginate是Vue.js 2.x+生态系统中一个简单易用的分页解决方案。无论您是Vue.js新手还是经验丰富的开发者,在使用vuejs-paginate进行前端分页开发时都可能遇到各种问题。本文将为您提供完整的vuejs-paginate常见问题解答,帮助您快速掌握这个实用的Vue.js分页组件。 ## 🔍 基础安装与配置问题 ### 如何正确安装vue

gitblog_00618的博客 972

Vue.js组件开发

在现代前端开发中,组件化开发已经成为主流模式。Vue.js作为一款渐进式JavaScript框架,其组件系统设计优雅且功能强大。本文将全面深入地探讨Vue.js组件开发的各个方面,从基础概念到高级技巧,帮助开发者掌握Vue组件开发的精髓。Vue组件是Vue.js最强大的功能之一,它允许我们将UI划分为独立、可复用的代码片段。每个组件本质上是一个拥有预定义选项的Vue实例。// 定义一个简单的Vue组件</div>'})组件是可复用的Vue实例,具有以下特点:拥有自己的模板、逻辑和样式。

前端码农的博客 927

Vue.js组件开发教程

组件是 Vue.js 应用程序的基本构建块。它们是独立且可复用的代码块,可以包含模板、逻辑和样式。提高代码的可维护性实现代码复用使应用结构更加清晰子组件可以通过$emit方法向父组件发送事件。组件是构建 Vue.js 应用程序的基石。通过本教程,您应该对如何创建和使用组件有了基本的了解。继续探索 Vue.js 的组件系统,可以让您的应用更加模块化、可维护和强大。希望这份教程对您有所帮助,祝您在 Vue.js 的学习和开发中取得成功!

q903249871的博客 1566

【Vue】组件化开发

正文组件是 Vue 的核心功能,允许我们将 UI 拆分为独立可复用的代码片段。 1.2 组件基本用法 2. 组件通信 2.1 Props 向下传递数据 2.2 自定义事件向上传递数据 2.3 插槽分发内容 3. 组件注册与组织 3.1 组件命名约定 3.2 模块化组件系统 3.3 动态组件 4. 组件高级模式 4.1 组件递归 4.2 依赖注入 4.3 异步组件 5. 组件通信进阶 5.1 Provide/Inject 响应式 5.2 事件总线 6. 组件复用技术 6.1 混入 (M

Guiat的博客 1082

Vue 开发 UI 组件库

Vue 开发 UI 组件库并打包发布到 npm 仓库

weixin_49809163的博客 4763

VUE组件如何开发

import { mount } from '@vue/test-utils' import Button from './Button.vue' test('触发点击事件', async () => { const wrapper = mount(Button, { props: { label: 'Submit' } }) await wrapper.trigger('click') expect(wrapper.emitted()).toHaveProperty('click') })

Program Han 997
上一篇: Vue2.0-侦听器
下一篇: Git基本操作
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值