前端应用开发实验:组件应用

目录

  • 实验目的
  • 相关知识点
  • 实验内容及要求
    • 代码实现
    • 效果

实验目的

(1)掌握组件的创建方法(全局组件、局部组件);
(2)重点学会组件之间的数据传递(prop传值、自定义事件);
(3)学会动态组件的创建。

相关知识点

组件是 Vue.js 提供的最强大的功能之一。通过开发组件可以封装可复用的代码,并注册为标签,从而实现扩展 HTML 元素的功能。
(1)注册组件:有全局注册和局部注册两种方式。
全局组件(全局注册的组件)可以在所有实例中使用。注册全局组件的语法格式如下:
Vue.component(tagName, options)
其中,tagName表示组件名称,建议遵循 W3C 规范中组件命名方式,即字母全部小写并包含一个连字符“-”;option可以是应用 Vue.extend()方法创建的一个组件构造器,也可以是组件的选项对象。
在组件注册之后,就可以在 Vue 根实例中以自定义元素形式来使用该组件了。使用组件的语法格式如下:

其中,tagName:表示组件名称。
通过使用 Vue 实例或父组件中的 components 选项,可以注册一个局部组件(只能在当前实例或父组件中使用)。其中,属性名表示所定义组件的名称,属性值表示该组件的选项对象。
(2)数据传递
因为组件实例的作用域是相互独立的,所以子组件的模板无法直接引用父组件中的数据,反之亦然。为了实现组件之间的数据传递,Vue.js提供了相应的数据传递机制。
父组件通过使用自定义属性 Prop 给子组件传递数据。在组件选项对象的props选项中定义 Prop 属性。除了可以传递静态数据外,可以通过使用v-bind 指令绑定属性的方式将父组件中的data数据传递给子组件。每当父组件的数据发生变化时,子组件也会随之变化。由于HTML中的属性名是不区分大小写的,所以当 props 中的命名采用“小驼峰”方式,需要在调用组件的标签中使用其等价的短横线分割的命名方式来命名属性。
子组件使用自定义事件来向父组件传递数据。子组件可以通过调用内建的 e m i t ( ) 方法并传入自定义事件名称来触发自定义事件。格式如下: v m . emit()方法并传入自定义事件名称来触发自定义事件。格式如下: vm. emit()方法并传入自定义事件名称来触发自定义事件。格式如下:vm.emit(eventName, […args])
其中,eventName: 传入的事件名称;[…args]: 可选,触发事件传递的参数。
父组件则可以像处理原生DOM事件一样通过v-on指令监听子组件实例的自定义事件。
如果想要在某个组件的根元素上监听一个原生事件,可以使用 v-on 指令的 native 修饰符。
(3)动态组件
Vue.js允许使用动态组件,让多个组件使用同一个挂载点,根据条件在不同组件之间动态切换。动态组件通常应用在路由控制或选项卡切换中。
通过使用元素,动态绑定它的 is 属性,根据 is 属性的值来判断使用哪个组件。有时需要保持某些组件的状态,以避免重复渲染,可以使用一个元素将动态组件包裹起来。

实验内容及要求

运用组件的相关知识实现选项卡的切换,点击删除,删除相应电影,效果如图1~3所示。
在这里插入图片描述

图1
在这里插入图片描述

图2
在这里插入图片描述

图3

参考基础代码如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

请在此基础上,利用Vue组件相关知识完成代码的编写和调试。

代码实现

<!DOCTYPE html>
<html>
<head>
  <title>Vue 电影票房排序示例</title>
  <meta charset="UTF-8">
  <style> 
    body { 
        font-family: Arial, sans-serif; 
        background-color: #f7f7f7; 
        margin: 0; 
        padding: 0; 
    } 
    #app { 
        max-width: 400px; 
        margin: 0 auto; 
        padding: 20px; 
        background-color: #fff; 
        border-radius: 5px; 
        box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); 
    } 
    h1 { 
        font-size: 24px; 
        margin-bottom: 20px; 
    } 
    button { 
        background-color: #007bff; 
        color: #fff; 
        border: none; 
        border-radius: 3px; 
        padding: 5px 10px; 
        cursor: pointer; 
        margin-right: 10px; 
    } 
    ul { 
        list-style: none; 
        padding: 0; 
    } 
    li { 
        margin-bottom: 10px; 
    } 
</style> 
</head>
<body>
  <div id="app">
    <!-- 排序按钮 -->
    <button @click="sortByBoxOffice">热播</button>
    <button @click="reverseOrder">经典</button>

    <!-- 电影列表 -->
    <ul>
      <li v-for="movie in movies" :key="movie.id">
        {{ movie.name }} - 票房: {{ movie.boxOffice }}
        <!-- 删除按钮 -->
        <button @click="deleteMovie(movie.id)">删除</button>
      </li>
    </ul>
  </div>
   <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.js"></script>
  <script>
    new Vue({
      el: '#app',
      data: {
        movies: [
          { id: 1, name: '原神,启动!', boxOffice: 900 },
          { id: 2, name: '我要玩王者荣耀', boxOffice: 1200 },
          { id: 3, name: '三国杀司马游戏', boxOffice: 500 },
          {id:4,name:'一就是一而就是二',boxOffice:1000}
          // 更多电影...
        ],
        originalOrder: []
      },
      created() {
        // 在组件创建时保存原始顺序
        this.originalOrder = [...this.movies];
      },
      methods: {
        sortByBoxOffice() {
          // 按票房排序当前电影列表
          this.movies.sort((a, b) => b.boxOffice - a.boxOffice);
        },
        reverseOrder() {
          // 恢复到删除操作之前的顺序
          this.movies = [...this.originalOrder];
        },
        deleteMovie(id) {
          // 删除指定 ID 的电影并更新原始顺序
          this.movies = this.movies.filter(movie => movie.id !== id);
          this.originalOrder = this.originalOrder.filter(movie => movie.id !== id);
        }
      }
    });
  </script>
</body>
</html>

效果

点击经典
在这里插入图片描述
点击热播
在这里插入图片描述
点击删除
在这里插入图片描述
删除后仍然可以排序
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单列集合--ArryList、LinkedList、Set

使用IDEA进入某个类之后&#xff0c;按ctrlF12,或者alt数字7&#xff0c;可查看该实现类的大纲。 package exercise;import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.function.Consumer;public class Demo3 {public static void…

微信小程序公众号二合一分销商城源码系统 基于PHP+MySQL组合开发的 可多商户商家入驻 带完整的安装代码包以及搭建教程

系统概述 微信小程序公众号二合一分销商城源码系统&#xff0c;是基于PHPMySQL组合开发的一款高效、稳定的电子商务平台解决方案。该系统创新性地将微信公众号与小程序的功能进行了深度整合&#xff0c;为商家提供了一个功能齐全、易于管理的分销商城系统。通过此系统&#xf…

基于聚类与统计检验深度挖掘电商用户行为

1.项目背景 在当今竞争激烈的电商市场中,了解用户的行为和需求对于制定成功的市场策略至关重要,本项目通过建立RFM模型、K-Means聚类模型,将1000个用户进行划分,针对不同类的用户,提出不同的营销策略,最后通过统计检验来探究影响用户消费行为的因素和影响用户上网行为的…

揭秘数字工厂:如何运用AGV、LMS和WMS成为制造业的隐藏神器

揭秘数字工厂&#xff1a;如何运用AGV、LMS和WMS成为制造业的隐藏神器 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &a…

泛微开发修炼之旅--07通过后端代码实现创建并发送待办、源码及示例

文章链接&#xff1a;泛微开发修炼之旅--07通过后端代码实现创建并发送待办、源码及示例

C语言实战:贪吃蛇(万字详解)

&#x1f4a1;目录 效果图 界面设计思路 1. 基本布局 2. 视觉元素 游戏机制设计 基本规则 游戏代码 前期准备 游戏代码详解 数据结构设计 宏定义 数据结构定义 函数原型&#xff08;详见后文&#xff09; 主函数代码 核心代码 Review 效果图 界面设计思路 1. 基…

[论文笔记]Mixtral of Experts

引言 今天带来大名鼎鼎的Mixtral of Experts的论文笔记&#xff0c;即Mixtral-8x7B。 作者提出了Mixtral 8x7B&#xff0c;一种稀疏专家混合(Sparse Mixture of Experts&#xff0c;SMoE)语言模型。Mixtral与Mistral 7B具有相同的架构&#xff0c;不同之处在于每个层由8个前馈…

Mybatis03-ResultMap及分页

1、属性名和字段名不一致问题 1.问题 数据库中的字段 新建一个项目Mybatis-04&#xff0c;拷贝之前&#xff0c;测试实体类字段不一致的情况 public class User {private int id;private String name;private String password; }select * from mybatis.user where id #{id} …

2024年会计、金融与工商管理国际会议(ICAFBA 2024)

2024年会计、金融与工商管理国际会议 2024 International Conference on Accounting, Finance, and Business Administration 【1】会议简介 2024年会计、金融与工商管理国际会议是一场集合了全球会计、金融与工商管理领域专家学者的学术盛会。此次会议旨在深入探讨会计、金融与…

【C++课程学习】:类和对象(上)(类的基础详细讲解)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f35f;1.1类的引出&#xff1a; &#x1f35f;1.2类的结构&#xff1a; &#x1f35f;1.3类的…

进入新公司有焦虑感怎么办?

前因 前两天技术交流群里有童鞋问了一个很有意思的问题&#xff0c;他问如何克服进入新公司的焦虑感&#xff1f;很多热心的童鞋都纷纷支招&#xff0c;比如 “主动干活”、“专注干活”、“让时间冲淡焦虑感”、……等等&#xff0c;这些都很有道理&#xff0c;不过&#xff…

最小栈、栈的弹出(C++)

1.最小栈 思路分析&#xff1a; 代码&#xff1a; class MinStack { public:MinStack() {}void push(int val) {st.push(val);//两种情况需要更新最小值//1.最小栈为空(就是存最小值的那个栈)//2.插入的值小于或等于最小栈的栈顶元素if(minstack.empty()||minstack.top()>…

高并发系统限流原理

短时间内巨大的访问流量&#xff0c;我们如何让系统在处理高并发的同时还能保证自身系统的稳定性&#xff1f;估计有人会说&#xff0c;增加机器就可以了&#xff0c;因为我的系统架构设计就是按照分布式思想进行架构设计的&#xff0c;所以可以只需要增加机器就可以解决问题了…

word自带公式编辑器技巧

1.实现多行公式换行且对齐 1.1 准备阶段&#xff08;默认Unicode模式&#xff09; 进入公式编辑模式&#xff0c;输入\eqarray&#xff0c;紧接着按下空格键输入空格&#xff0c;如下 1.2 实现换行和对齐 将要编辑的公式输入到括号内 &&#xff1a;实现位置对齐 &…

【微机原理与汇编语言】循环程序设计

一、实验目的 1.熟练掌握8086/8088常用汇编指令的使用方法 2.熟练掌握循环结构程序编程技巧 3.熟练掌握汇编语言程序运行调试方法 二、实验要求 认真分析实验题目&#xff0c;设计程序流程图&#xff0c;独立完成代码编写及运行调试。 三、实验题目 给出不大于255的十个…

中信证券:A股下半年将迎来年度级别上涨行情的起点

中信证券认为&#xff0c; 过去3年压制A股表现的经济动能转换&#xff0c;资本市场生态&#xff0c;中美战略博弈这三大叙事都将迎来重大拐点&#xff0c;随着政策、价格、外部三类信号逐步验证&#xff0c;2024年下半年A股市场将迎来年度级别上涨行情的起点 过去3年压制A股表…

uniapp小程序开发 | 从零实现一款影视类app (后台接口实现,go-zero微服务的使用)

uniapp小程序开发实战系列&#xff0c;完整介绍从零实现一款影视类小程序。包含小程序前端和后台接口的全部完整实现。系列连载中&#xff0c;喜欢的可以点击收藏。 该篇着重介绍获取轮播图后台接口和获取正在热映电影的两个后台接口的实现。 后台服务使用golang&#xff0c;…

vue3学习(七)

前言 接上一篇学习笔记&#xff0c;今天主要是分享上次学习完了&#xff0c;还没来得及记录&#xff0c;趁今天晚上换换脑子的时间记录下。 今天主要是记录的vuex文件的拆分&#xff0c;因为毕竟如果只在一个index.js文件写&#xff0c;文件会随着业务的复杂性上升&…

益智内容教培教育课程小程序的效果是什么

从孩子出生开始&#xff0c;很多家长们就可以开始制定学习计划&#xff0c;幼儿园前后时间段益智学习家长们很看重&#xff0c;各样的线上课程、线下读本及老师指导等。 市场中也有相关从业公司&#xff0c;在品牌拓展和内容触达转化方面发力&#xff0c;客商双方服务获取条件…