学习笔记-Vue 组件的运用(模板技术)

【零基础入门VUE】VueJS - 概述 不会对 DOM 进行更改,而是创建 DOM 的副本,该副本以 JavaScript 数据结构的形式存在。最终的更改会更新到真实的 DOM,用户将看到它的变化。随后,对两个 JavaScript 对象进行比较,并在真实 DOM 中更新最终的更改。Ember 添加了 glimmer 渲染引擎,旨在提高重新渲染性能,这与使用虚拟 DOM 的 VueJS 和 React 是类似的概念。随着时间的推移,淘汰赛的发展速度已经放缓。VueJS 继承了 Angular 和 React 的优点,并构建了一个强大的库。 阅读详情

目录

全局组件

组件的根元素

组件的 data 属性

例子:自定义密码输入框组件

1. 下载图标

2. 定义组件

3. 调整布局

4. 添加事件

5. 验证

例子:自定义分页组件

1. 先找一个分页的实例

2. 获取数据

3. 计算分页数

4. 动态创建元素

5. 组件传值

1. 父传子

6. 高亮显示

2. 子传父


全局组件

全局组件需要在 Vue 创建实例前创建好

组件的根元素

在vue 2 中,只能有一个根元素,vue 3可以有多个

组件的 data 属性

组件内部的数据的 data 只能使用方法,不能使用对象

        在 Vue.js 中,组件的 data 属性必须被定义为一个函数而不是一个对象,这是因为每个组件实例都需要拥有自己独立的一份数据。当 data 被定义为一个函数时,每次创建一个新的组件实例时,这个函数都会被调用一次,从而返回一个新的对象。这样可以确保每个实例都有其独立的状态,不会因为共享数据而产生意外的副作用。

        如果 data 是直接定义为一个对象,那么所有基于这个组件创建的实例将会共享同一份数据。这意味着改变其中一个实例的数据会直接影响到其他所有实例的数据

在这种情况下,所有的 my-component 实例都将共享同一个 message 属性。如果你在一个实例中改变了 message,它会影响到所有其他的实例。

Vue.component('my-component', {
  template: '<div>{{ message }}</div>',
  data: {
    message: 'Hello'
  }
});

正确的做法是

Vue.component('my-component', {
  template: '<div>{{ message }}</div>',
  data: function () {
    return {
      message: 'Hello'
    };
  }
});

例子:自定义密码输入框组件

做一个类似华为网站登录界面的密码输入框

1. 下载图标

iconfont-阿里巴巴矢量图标库

2. 定义组件

3. 调整布局

创建一个css 文件,把调整好的格式复制到文件里

.password-input {
    position: relative;
}
.password-input input {
    width: 200px;
    height: 24px;
}
.password-input img {
    width: 30px;
    position: absolute;
    left: 175px;
    top: 2px;
}

4. 添加事件

<!DOCTYPE html>
<html lang="en">
<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">
    <title>Document</title>
    <script src="../static/js/vue.js"></script>
    <link rel="stylesheet" href="../static/css/password.css">
</head>
<body>
    <div id="app">
        <my-password-input></my-password-input>
    </div>
    <script>
        Vue.component("my-password-input",{
            template:`
                <div class="password-input">
                    <input :type="type" v-model="password">
                    <img :src="src" @click="showPassword">
                </div>
            `,
            data() {
                return {
                    type :"password",
                    src :"../static/image/不可见.png"
                }
            },
            methods: {
                showPassword(){
                    if ( this.type == "password" ){
                        this.type = "text";
                        this.src = "../static/image/可见.png";
                    }else {
                        this.type = "password";
                        this.src = "../static/image/不可见.png";
                    }
                }
            },
        })

        new Vue({
            el:"#app",
        })
    </script>
</body>
</html>

5. 验证

不可见状态

点击可见后

例子:自定义分页组件

1. 先找一个分页的实例

CSS 分页实例 | 菜鸟教程

CSS 文件

ul.pagination {
    display: inline-block;
    padding: 0;
    margin: 0;
}

ul.pagination li {display: inline;}

ul.pagination li a {
    color: black;
    float: left;
    padding: 8px 16px;
    text-decoration: none;
    transition: background-color .3s;
    border: 1px solid #ddd;
}

ul.pagination li a.active {
    background-color: #4CAF50;
    color: white;
    border: 1px solid #4CAF50;
}

ul.pagination li a:hover:not(.active) {background-color: #ddd;}

显示正常

2. 获取数据

这里获取数据是为了方便调整分页的数量

记得引入 axios.min.js 

created 表示在页面创建完成后调用方法

总记录条数8条,这次请求的数量是5条记录,那么还有3条记录需要在第二页显示

3. 计算分页数

4. 动态创建元素

因为分页的数量在 父组件那里,需要获取父组件的 pageCount

5. 组件传值

什么是父子组件

1. 父传子

将父组件的 分页对象 page 传给子组件

        父组件设置自定义属性,通过自定义属性传值

        子组件通过 props 接收父组件传过来的参数

6. 高亮显示

2. 子传父

子组件的当前页面发生变化,比如,点击第二页的按钮时,需要通知父组件处理

子组件通过$emit()来通知父亲

父组件通过自定义的事件接收子组件传的参数

点击切换

源码

<!DOCTYPE html>
<html lang="en">
<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">
    <title>Document</title>
    <script src="../static/js/vue.js"></script>
    <script src="../static/js/axios.min.js"></script>
    <link rel="stylesheet" href="../static/css/pages.css">  <!-- 自定义的CSS文件 --> 
</head>
<body>
    
    <div id="app">
        <pages-component :page="page" @change-page="changePage"></pages-component>
    </div>

    <script>
        Vue.component("pages-component",{
            props:{
                page: {
                    type: Object,
                },
            },
            template:`
                <ul class="pagination">
                    <li><a href="#">«</a></li>
                    <li v-for="item in page.pageCount">
                        <a href="#" :class="item==page.pageCurre ? 'active' : '' " @click="changePage(item)">{{ item }}</a>
                    </li>
                    <li><a href="#">»</a></li>
                </ul>
            `,
            methods:{
                changePage(index){
                    this.$emit("change-page",index)
                }
            }
        })
        new Vue({
            el:"#app",
            data:{
                page:{
                    pageCurre:1,
                    pageSize:5,
                    pageCount:0,
                }
            },
            created() {
                this.getAdmins();
            },
            methods: {
                getAdmins(){
                    axios.post(        //改成你自己的请求路径
                        "http://localhost:8080/mybatis_war_exploded/Admin/GetAdmins",
                        this.page,
                    ).then((res) => {
                        console.log(res.data);
                        this.page.pageCount = Math.ceil(res.data.count / this.page.pageSize)  // 总页数除以每页显示的条数,ceil 向上取整
                    })
                },
                changePage(index){
                    this.page.pageCurre = index;
                    this.getAdmins();
                }
            },
        })
    </script>
</body>
</html>

 

vue中组件模板为什么只有一个根元素? 在 Vue 中,组件模板只能有一个根元素(也称为根节点)的限制是由 Vue 的渲染机制所决定的。如果组件模板有多个根元素,那么 Vue 就无法确定应该将这些根元素映射到哪个位置,并且无法准确地更新和管理组件的状态。为了解决这个问题,Vue 要求组件模板只能有一个根元素。通过将所有内容包裹在一个根元素中,Vue 可以准确地映射组件模板到实际的 DOM 结构,并且能够高效地更新和管理组件的状态。在渲染过程中,Vue 需要将这两个根元素映射到实际的 DOM 结构上,但是并没有一个明确的规则来定义它们的位置。 阅读详情

相关推荐

Edge浏览器IE模式失效?最新142版本隐藏按钮的3种解决方案

本文针对Edge浏览器142版本中IE模式按钮消失的问题,提供了3种实用解决方案,包括注册表修改、手动添加网站到IE模式列表和企业策略部署方案,帮助用户解决兼容性问题,确保老旧系统正常访问。

weixin_28308325的博客 497

vue 组件

1. 什么是组件化开发 组件化开发指的是:根据封装的思想,把页面上可重用的 UI 结构封装为组件,从而方便项目的开发和维护。 2. vue 中的组件化开发 vue 是一个支持组件化开发的前端框架。 vue 中规定:组件的后缀名是 .vue。之前接触到的 App.vue 文件本质上就是一个 vue 的组件。 3. vue 组件的三个组成部分 每个 .vue 组件都由 3 部分构成,分别是: template -> 组件的模板结构 script -> 组件的 JavaScript 行为

weixin_45856470的博客 472

erdas监督分类(二)

去云 用一张没有云的影像替代有云影像 构建aoi图层 将云和云影编码合并 重编码工作 在监督分类做的差不多以后(纠正无误,无明显错误),就要对监督分类图像进行重编码和颜色调整。 在中选中Recode,对原来分类的地物类别进行重编码,(为彻底修改,记得备份)选中一列,在New Value输入新的编码,依次编码后点击应用apply,即可实现。 这时的图像如果是全黑的或者只有一两类的颜色也没有关系,新的编码覆盖掉了原来的编码,但是颜色并没有改变才会这样。可以点击图像,右击...

weixin_58968530的博客 958

Vue组件(详解)

此文章该说的都说了,还补充了一些额外的相关知识;文章通俗易懂,也举了很多的例子,每讲完一个功能就会带上此功能的代码,和代码在浏览器的执行结果,适合初学者;

zky__sch的博客 2010

FICO F.27 Customer statement 打印

需求,定制化打印,替换标准的F.27打印 类似于采购订单的打印,但是略有不同,查阅资料之后步骤如下: T-code F.27 is SAP standard program to produce customer/vendor correspondence (letter). Correspondence Type is used to specify the related printing program and form for the particular correspondence. SAP

IamRunjiang的博客 1964

MarkDown简介(深度解析MarkDown用法)

欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I...

酷酷的旭 7341

vue 模板、组件

vue 模板、组件、入门

qq_38567182的博客 1190

无感健康监测的未来:毫米波雷达如何重新定义睡眠科技与居家养老

毫米波雷达技术正重新定义无感健康监测,特别是在睡眠科技与居家养老领域。通过精准监测呼吸、心率和体动,无需穿戴设备即可实现临床级精度。结合合宙Air700E开发板,构建了完整的远程看护解决方案,为老年人提供跌倒检测、异常报警等安全保障,同时保护用户隐私。

cake8的博客 566

vue组件的创建模板

一、vue组件的构成:样式style + 结构template + 交互script。

2301_78670081的博客 332

大模型量化技术全解析:从INT8到GPTQ/AWQ,降低部署成本实战指南

模型量化是一种通过降低神经网络权重和激活值的数据精度(如从FP16降至INT8/INT4),从而大幅减少模型内存占用和计算开销的核心模型压缩技术。其原理基于线性变换,将高精度浮点数映射到低精度整数表示,在硬件层面能利用专用低精度计算单元实现显著加速。这项技术的核心价值在于解决了大模型(如千亿参数LLM)部署时面临的高昂显存成本和推理延迟问题,使其能在消费级GPU和边缘设备上高效运行。当前,后训练量化(PTQ)因其无需重新训练的特性成为主流,衍生出GPTQ、AWQ、SmoothQuant等多种方法,广泛应用于

weixin_33804582的博客 629

热力学仿真软件:Fluent_(8).材料属性设置

在 Fluent 中,材料属性主要包括密度、比热容、导热系数、黏度等物理性质。这些属性在不同的仿真场景中有着不同的作用,例如在流体仿真中,密度和黏度是必不可少的;在传热仿真中,导热系数和比热容是主要考虑的因素。如果所需的材料不在材料库中,或者需要对现有材料进行修改,用户可以自定义材料属性。在主菜单中选择Materials。点击打开材料编辑器。在材料编辑器中,点击Create按钮,输入新的材料名称。选择材料类型(如FluidSolid等)。在属性栏中填写所需的材料属性。

kkchenjj的博客 1492

VueJS 之动态组件

在组件的动态切换过程中,存在组件的生成与销毁过程。在切换组件后,原组件将被销毁。再次切换为原组件时,由于组件经历了再生成的过程,组件中的数据都将处于初始状态。在实现组件的动态切换功能时,你可能会想保持这些组件的状态,以避免反复重新渲染导致的性能问题。我们可以使用 keep-alive 元素达成该目的。

两个月亮 6441

rk628d修改默认分辨率

在rk3568上使用628d hdmi转mipi,在628d已经调试好的情况下,客户新增需求:视频输入这边的推荐分辨率固定在1024x768。

m0_60805802的博客 2053

VueJS 基础之组件

组件化的目的,是为了让页面中的各个部分可以被复用,以减少重复的代码。另一方面,也可以更好地使团队分工协作,让不同的人负责编写不同的组件。

两个月亮 1679

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Vue时间轴组件终极指南:timeline-vuejs完整使用教程

Vue时间轴组件是Vue.js生态中常用的UI元素,用于以时间顺序展示事件或流程。timeline-vuejs作为一款极简设计的Vue时间轴组件,以其轻量级、高性能和高度可定制的特点,成为众多开发者的首选。本文将为你提供timeline-vuejs时间轴组件的完整使用教程,帮助你快速掌握这款超简单的Vue组件。 ## 为什么选择timeline-vuejs时间轴组件? ### 🚀 轻量级设计

gitblog_01124的博客 999

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

vuejs 组件_组件VueJS模拟终端

vuejs 组件 贝壳 (vue-shell) vue-shell is a component vuejs to provides an easy way to create a terminal on your application and then add your own philosophy by adding all the commands you want with their ...

cuk5340的博客 1157

Vue时间轴组件终极指南:5分钟快速上手timeline-vuejs

在现代Web开发中,Vue时间轴组件已成为展示时间线数据的首选工具,特别是timeline-vuejs以其极简设计和强大功能脱颖而出。本文将带你从零开始,全面掌握这款Vue时间轴组件的使用方法,让你在短时间内构建出专业级的时间轴效果。 ## 为什么选择timeline-vuejs? **🚀 极致轻量**:核心代码体积小,不依赖额外大型库,确保项目性能不受影响。 **🎨 高度可定制**:提

gitblog_00588的博客 961

探索Require-Vuejs:动态加载Vue组件的利器

探索Require-Vuejs:动态加载Vue组件的利器 在现代Web开发中,Vue.js已经成为构建用户界面的首选框架之一。然而,随着项目规模的扩大,如何高效地管理和加载Vue组件成为一个挑战。今天,我们将介绍一个强大的开源项目——Require-Vuejs,它通过RequireJS插件的形式,实现了Vue单文件组件的异步和动态加载。 项目介绍 Require-Vuejs是一个轻量级的库,专门设...

gitblog_00837的博客 1103

vue画廊组件_VueJS的响应式画廊组件

vue画廊组件 Vue画廊幻灯片放映 (vue-gallery-slideshow) Responsive image gallery for VueJS. VueJS的自适应图像库。 View demo 查看演示 Download Source 下载源 安装 (Installation) NPM (NPM) npm install vue-gallery-slideshow --s...

cuk5340的博客 1223

【免费下载】 Vue.js时间轴组件——timeline-vuejs 安装与配置完全指南

timeline-vuejs 是一个简约的时间轴组件,专为Vue.js设计。由开发者 Pablo Sirera 创建并维护,它提供了一个直观易用的方法来展示一系列按时间顺序排列的事件。此项目基于MIT许可协议开放源代码。 ## 关键技术和框架 - **主要编程语言**: JavaScript (采用Vue.js框架) - **依赖库**: 本项目主要依赖于Vue.js,没有列出额外的大型依赖,因...

gitblog_07760的博客 2111

vuejs 组件_简单美观的卡片组件,带有优雅的VueJS火花线

vuejs 组件 信息卡 (vue-info-card) Simple and beautiful card component with an elegant spark line, for VueJS. 用于VueJS的简单美观的卡片组件,带有优雅的火花线。 View Demo 查看演示 Download Source 下载源 安装 (Installation) npm i -S vu...

cuk5340的博客 2731

vuejs中的组件以及父子组件间通信传值

虽互不曾谋面,但希望能和你成为笔尖下的朋友以读书,技术,生活为主,偶尔撒点鸡汤不作,不敷衍,意在真诚吐露,用心分享点击左上方,可关注本刊(您有任何疑问,都可以进行提问,我们一起探讨)前言...

itclanCoder 1718

VueJS WebPack separating javascript from vue

VueJS 与 Webpack:将 JavaScript 从 Vue 文件中分离

suiusoar 1350

5分钟快速上手:Vue时间轴组件timeline-vuejs完整使用指南

Vue时间轴组件是前端开发中展示时间序列数据的常用工具,timeline-vuejs作为一款轻量级、易上手的Vue时间轴组件,能够帮助开发者快速构建美观的时间轴界面。无论你是Vue.js初学者还是有一定经验的前端开发者,本指南都将带你从零开始掌握timeline-vuejs的使用方法。 ## 🚀 为什么选择timeline-vuejs? ### 极简设计,零学习成本 timeline-vue

gitblog_00928的博客 1148

vuejs-datepicker|简单易用的Vue.js日期选择组件

vuejs-datepicker是一个简单易用的Vue.js日期选择组件。它使用了Bootstrap 4的样式,支持多种语言,具有直观的界面,易于配置和扩展。

delmarks的博客 1万+

Vuejs:component动态组件的使用示例

component动态组件很适合在不同组件之间切换,相比。组件 ComponentA.vue。组件 ComponentB.vue。组件 ComponentC.vue。依赖 package.json。入口文件 main.js。

彭世瑜的博客 2311
上一篇: 学习笔记- MyBatis 动态 SQL
下一篇: 学习笔记-Vue 基础使用
LearnTech_123
博客等级 码龄3年 445粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值