首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Angular mat-tab返回到另一个类的第一个选项卡

基础概念

Angular Material(Angular的官方UI组件库)中的mat-tab-group组件用于创建选项卡界面。每个选项卡由mat-tab组件表示。用户可以通过点击不同的选项卡来切换显示的内容。

相关优势

  1. 一致性:Angular Material提供了一致的UI设计,使得应用程序看起来更加专业。
  2. 响应式设计:选项卡组件在不同屏幕尺寸下都能良好地工作。
  3. 易于集成:与Angular框架无缝集成,使用简单。

类型

  • 静态选项卡:在HTML中静态定义选项卡。
  • 动态选项卡:通过代码动态添加或删除选项卡。

应用场景

  • 导航:用于页面内的导航,将不同的内容分组到不同的选项卡中。
  • 设置页面:用户可以在不同的设置选项卡之间切换,查看和修改不同的设置。

问题描述

假设我们有一个Angular应用,其中有两个组件:ComponentAComponentBComponentA包含一个选项卡组,用户可以在其中切换选项卡。当用户从ComponentA导航到ComponentB,然后再返回到ComponentA时,我们希望用户能够回到之前选择的选项卡,而不是默认的第一个选项卡。

为什么会这样

默认情况下,当用户返回到ComponentA时,Angular Material的选项卡组件会重置到第一个选项卡。这是因为组件的状态在导航过程中丢失了。

解决方法

为了实现返回到之前选择的选项卡,我们可以使用Angular的路由和本地存储来保存和恢复选项卡的状态。

步骤

  1. 保存当前选项卡索引:当用户切换选项卡时,将当前选项卡的索引保存到本地存储中。
  2. 恢复选项卡索引:当用户返回到ComponentA时,从本地存储中读取选项卡索引,并设置为当前选项卡。

示例代码

代码语言:txt
复制
// componentA.component.ts
import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-componentA',
  templateUrl: './componentA.component.html',
  styleUrls: ['./componentA.component.css']
})
export class ComponentA implements OnInit {
  selectedIndex: number = 0;

  constructor() { }

  ngOnInit(): void {
    // 从本地存储中恢复选项卡索引
    const savedIndex = localStorage.getItem('tabIndex');
    if (savedIndex) {
      this.selectedIndex = parseInt(savedIndex, 10);
    }
  }

  onTabChange(index: number): void {
    // 保存当前选项卡索引到本地存储
    localStorage.setItem('tabIndex', index.toString());
  }
}
代码语言:txt
复制
<!-- componentA.component.html -->
<mat-tab-group [selectedIndex]="selectedIndex" (selectedTabChange)="onTabChange($event.index)">
  <mat-tab label="Tab 1">Content 1</mat-tab>
  <mat-tab label="Tab 2">Content 2</mat-tab>
  <mat-tab label="Tab 3">Content 3</mat-tab>
</mat-tab-group>

参考链接

通过这种方式,用户可以返回到之前选择的选项卡,而不是默认的第一个选项卡。

相关搜索:返回到另一个选项卡的最后一页JS在Angular中打开指向另一个选项卡的链接如何从第一个类中声明的另一个类中访问类的对象?如何为动态li中的第一个选项卡添加活动的类请在Angular中重新加载后,如何加载我的第一个选项卡的内容TapGestureRecognizer调用另一个类中的函数并访问第一个类的变量添加另一个选项卡C# winforms后,第一个选项卡上的内容将消失Angular 2删除另一个元素上的类(相同的模板)滑块-将活动类添加到当前打开的基础选项卡中的第一个<a>如何在google sheets中将日期后的第一个值从一个选项卡拉到另一个选项卡中?如何使用事件和委托模型将第一个类中方法的输出传递给另一个类?如何将类和函数中的变量导出到Angular中的另一个组件?为基于Angular的Web应用程序实例化另一个JS文件中的JS类将第一个方法返回值传递给Angular2的Typescript中的另一个方法如何将值从一个类传递到另一个类,其中第一个类有来自第二个类的对象,但反之亦然?为什么抽象方法必须由第一个具体类实现,而不是链中的另一个?jQuery - 从上面找到具有特定类的第一个元素,但不是在另一个元素之前一个函数中的Angular Component类变量集在另一个函数中未定义当特定的ViewController类被推送到另一个选项卡中的堆栈时,如何从堆栈中弹出视图控制器?具有两个接口的多重继承,一个从first派生,另一个派生类实现第一个接口
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何使用 GitHub Actions 构建 Docker 镜像

在GitHub中创建repo,并将其命名为您想要的任何名称。在repo的根目录中添加一个文件,名为Dockerfile。如果你沿着我,你将构建一个包含Angular CLI的镜像。.../Dockerfile FROM node:12-alpine as node-angular-cli LABEL authors="Tinywan" # Linux setup # I got...CLI RUN npm install -g @angular/cli@8 创建GitHub Action 因此,要开始使用GitHub操作,请在GitHub中的repo页面上单击Actions选项卡...查看工作流输出 要查看工作流中发生的情况,并在需要时进行调试,请返回到存储库中的Actions选项卡。...一旦你创建了一个动作,该页面将看起来像这样: 除了在Actions选项卡中输出您的工作流之外,不要忘记转到Docker Hub并在那里查看您的图像!

77910

如何使用WijmoJS 纯前端设计器,快速生成 Angular 应用

WijmoJS VSCode Designer还提供了一个独立的命令,可以在单独的选项卡中打开设计图面,您可以在其中使用示例数据实例化控件,自定义其属性,并生成可以复制到源文件中的Angular标记。...在我们的示例中,操作是在单独的选项卡中打开设计图面,并使用 Angular标记提供的上下文,以及源文件中该标记的位置。 现在单击链接以在相邻选项卡中打开设计器。...但是,如果单击设计器左侧的“源视图”按钮,您将看到扩展程序已经发生更改。 要返回到设计图面,请单击WijmoJS 徽标下方的“设计视图”按钮。...但是,您应该知道扩展会记住调用它的Angular标记的文档范围。 如果随后修改了原始源文件,则应重新访问CodeLens链接以刷新关联的设计器选项卡。...将鼠标悬停在括号内的文本上,然后单击出现的链接。 现在,“属性”窗格显示特定于TrendLine类的属性。

5.4K40
  • 如何成为一名Web前端开发人员?入行学习完整指南

    经过如此多的试验和测试,而不是说你从头开始创建了所有内容,接着,你在网页上创建了第一个登录表单时,你感觉如何? 经过了多次更改后,将布局分配给第一个Web应用程序时感觉如何?...Tailwind CSS是其他正在流行的框架,与其他框架几乎没有什么不同。它是一组实用程序类,因此您可以创建自己的按钮和其他看起来与其他按钮确实不同的东西。它们也是高度可定制的。...无论是chrome还是firefox,您都应该知道如何使用不同的选项卡,例如元素选项卡,javascript控制台,用于请求和响应的网络选项卡,应用程序选项卡以及其他用于不同目的的选项卡。...Emmet是另一个很棒的工具,它允许您编写非常快速的HTML和CSS,这有助于提高开发人员的生产力。 学习使用javascript软件包管理器,例如NPM和Yarn。...与React和Angular相比,Vue最容易学习。VueX是为视图而构建的状态管理器。 Angular:此框架通常在大型组织中使用。它具有相当陡峭的学习曲线。

    2.2K11

    Spring Boot2 系列教程(三十九)Spring Boot 热部署

    用来加载那些不会变化的类,例如各种第三方依赖,而 restart classloader 则用来加载那些会发生变化的类,例如你自己写的代码。...Spring Boot 中热部署的原理就是当代码发生变化时,base classloader 不变,而 restart classloader 则会被废弃,被另一个新的 restart classloader...将第一个搜索结果添加到 Chrome 中,添加成功后,在 Chrome 右上角有一个 LiveReload 图标 ?...注意: LiveReload 是和浏览器选项卡绑定在一起的,在哪个选项卡中打开了 LiveReload,就在哪个选项卡中访问页面,这样才有效果。...访问成功后,我们再去手动修改 html 页面代码,修改成功后,回到浏览器,不用做任何操作,就会发现浏览器自动刷新了,页面已经更新了。 整个过程中,我的 Spring Boot 项目并没有重启。

    84110

    使用Ionic2开发Todo应用0 开始之前1 创建新的Ionic 2工程2. 设置主页(Home page)3 持久化数据保存4 总结

    相比其他组件该组件是特殊的,因为它是第一个组件被加载到应用程序,从那里我们可以显示更多的组件,可以添加更多的组件等等。基本上,我们的应用程序结构就像一棵树,根组件就是树的根。...推一个视图将会改变展现,弹出它将删除当前视图并回到前面的视图。关于导航的更详细的解释,我推荐看看一个相关的Ionic 2导航指南。 2....这次我们定义了另一个按钮,简单地调用了定义在add-item-page.ts中的saveItem函数。...同样注意到我们的保存按钮上使用了full属性,这个方便的小属性帮助我们设置按钮宽度为full。 2.5 建立添加项的类 现在我们将要建立一个类给我们的添加项组件。...这将允许我们建立一个侦听器,当回到主页(就是那个启动这个页面的另外一个页面)时获取数据。通过这种方式,我们可以从一个页面传递数据到另一个页面(然而,记住,模态不需要在页面之间传递数据)。

    6.1K50

    Spring Boot 修改静态资源一定要重启项目才会生效吗?未必!

    用来加载那些不会变化的类,例如各种第三方依赖,而 restart classloader 则用来加载那些会发生变化的类,例如你自己写的代码。...Spring Boot 中热部署的原理就是当代码发生变化时,base classloader 不变,而 restart classloader 则会被废弃,被另一个新的 restart classloader...将第一个搜索结果添加到 Chrome 中,添加成功后,在 Chrome 右上角有一个 LiveReload 图标 ?...注意: LiveReload 是和浏览器选项卡绑定在一起的,在哪个选项卡中打开了 LiveReload,就在哪个选项卡中访问页面,这样才有效果。...访问成功后,我们再去手动修改 html 页面代码,修改成功后,回到浏览器,不用做任何操作,就会发现浏览器自动刷新了,页面已经更新了。 整个过程中,我的 Spring Boot 项目并没有重启。

    1.6K20

    JHipster generator之Entity实体生成

    前言碎语 前一篇博文,我们已经使用jhipster搭建好了一个spring boot+angular的项目,包括账户体系和管理监控等基础功能!...控制台进入项目目录下,键入 yo jhipster:entity blog,就开启了 生成Entity的步骤了,blog是你自己要生成的实体类名。...这里主要分为5个个步骤 第一个步骤是生成相关字段和字段属性,步骤如下: Do you want to add a field to your entity?...(输入)另一个实体中关系的名称 同样,1-6完成后会回到1,询问你是否继续添加Entity关联关系,选N结束实体的相关进入到下一个步骤 第三个步骤,确定是否使用DTO通道?...(单选)ps:选No, use the entity directly就ok 第四个步骤,是否为实体创建单独的服务类?

    22850

    谁说Spring Boot 修改静态资源一定要重启项目才会生效,我看未必

    用来加载那些不会变化的类,例如各种第三方依赖,而 restart classloader 则用来加载那些会发生变化的类,例如你自己写的代码。...Spring Boot 中热部署的原理就是当代码发生变化时,base classloader 不变,而 restart classloader 则会被废弃,被另一个新的 restart classloader...在整个过程中,因为只重新加载了变化的类,所以启动速度要被重启快。 但是有另外一个问题,就是静态资源文件!使用 devtools ,默认情况下当静态资源发生变化时,并不会触发项目重启。...注意: LiveReload 是和浏览器选项卡绑定在一起的,在哪个选项卡中打开了 LiveReload,就在哪个选项卡中访问页面,这样才有效果。...访问成功后,我们再去手动修改 html 页面代码,修改成功后,回到浏览器,不用做任何操作,就会发现浏览器自动刷新了,页面已经更新了。 整个过程中,我的 Spring Boot 项目并没有重启。

    1.1K00

    新手们容易在Promise上挖的坑~

    这里的问题在于第一个then之中的并没有返回值,导致这个then会立即决议为undefined并执行第二个then中的操作。...并且 Promise.all() 会将执行结果组成的数组返回到下一个函数,比如当你希望从 PouchDB 中获取多个对象时,会非常有用。...此外一个更加有用的特效是,一旦数组中的 promise 任意一个返回错误,Promise.all() 也会返回错误。 #3 忘记使用.catch() 这是另一个常见的错误。...在早期,deferred 在 Q,When,RSVP,Bluebird,Lie等等的 “优秀” 类库中被引入, jQuery 与 Angular 在使用 ES6 Promise 规范之前,都是使用这种模式编写代码...首先,大部分 promises 类库都会提供一个方式去包装一个第三方的 promises 对象。举例来说,Angular的 $q 模块允许你使用 $q.when包裹非 $q 的 promises。

    1.5K50

    IntelliJ IDEA 2022.2.2汉化版免登陆账号「winmac」

    这个更新的对话框允许您按目录对文件进行分组,如果有多个文件与冲突合并,这应该会派上用场。- VCS日志选项卡中的增强功能您现在可以从“ 日志”选项卡的上下文菜单中删除提交中的Git标记。...此外,您可以根据需要打开任意数量的日志选项卡。- Branch过滤器中最喜欢的分支我们已将“收藏”分支添加到“ 日志”选项卡中的“ 分支”过滤器,因此您现在可以快速过滤您喜欢的分支的提交。...- 与Angular CLI的新集成在IntelliJ IDEA 2019中,由于与ng add的集成,您可以为Angular应用程序添加新功能。.... | Angular Dependency ...ng在不使用终端的情况下安装支持使用add 进行安装的库的操作。...- 新的JavaScript和TypeScript意图当你按下Alt + Enter键的新JavaScript和打字稿意图地段现已:实现接口,创建派生类, 实现一个接口或抽象类的成员,***的“开关”的情况下

    4.7K30

    AngularDart4.0 英雄之旅-教程-03英雄编辑器

    在“显示数据”页面中阅读有关插值的更多信息。 Hero对象 英雄需要更多的属性。 将英雄从文字字符串转换为类。 创建一个具有id和name属性的Hero类。...', 刷新浏览器,页面将显示英雄名 组合HTML和多行模板字符串 要显示所有英雄的属性,请为英雄的id属性添加一个,并为英雄的名称添加另一个。...数据在两个方向流动:从属性到文本框,从文本框返回到属性。 在表单和模板语法页面中阅读有关ngModel的更多信息。 @Component(指令:...)...在模板中使用任何Angular指令之前,需要在组件的@Component注解的指令参数中列出它们。...以下列出的是完整的app_component.dart: import 'package:angular/angular.dart'; import 'package:angular_forms/angular_forms.dart

    3.2K10

    理论 | Angular 中的响应式编程 -- 浅淡 Rx 的流式思维

    ) 这么说好像比较抽象,那么还是回到例子来看这个问题。...其实我们需要的是任何一个流的值变化的时候,新的合并流都应该有一个对应数据,这个数据包括刚刚变化的那个值和另一个流中最新的值。...响应式表单中的 Rx Angular 的表单处理非常强大,有模版驱动的表单和响应式表单两类,两种表单各有千秋,在不同场合可以分别使用,甚至混合使用,但这里就不展开了。...现在这个表单就建立好了,但你可能会问,这也没看出来响应式啊,别急,接下来我们就要看看它的响应式支持了。我们再回到一开始的小题目,我们的两个原始数据流:age$ 和 ageUnit$ 怎么构建?...Angular 4 中的 NgIf 的改进 Angular 4 中的 ngIf 现在可以携带 else 了,如果你曾经使用过 Angular 就知道,原来我们是得写两个 ngIf 来完成类似的功能的。

    5.3K10

    以太坊内部交易和代币交易 原

    你可以从外部将其作为调用函数的目标,或者你可以从内部对其进行定位,以便另一个已部署的合同可以调用已部署的合同上的函数。 值得注意的是,以太坊区块链上的所有交易都是通过外部账户设置的。...即使一个智能合约应该调用另一个,而另一个又转而调用其他的,第一笔交易必须由外部账户完成。尽管正在开发解决方案,但目前无法从外部自动调用交易。...外部和内部帐户之间的主要区别如下: 外部地址具有私钥,用户可以访问。内部地址不能直接作为钱包访问,只能通过调用其功能来使用。 交易类型 这将我们带回到交易类型。我们来看看这个地址吧。 ?...现在让我们看看第一个地址的第二个标签:内部交易。 注意:并非所有地址都有此选项卡。它仅在内部交易实际发生在账户上时才会出现。 ? 让我们看看其中一个,例如这一个。 ?...由于合约被另一个合约(ENS拍卖过程)触发而自动发回以太,它被记录为内部交易,因为以太的发送是智能合约中内置的逻辑的结果,并且不是由来自外面的人。

    3.4K20

    Angular 英雄编辑器

    HeroesComponent 的类文件如下: heroes.component.ts import { Component, OnInit } from '@angular/core'; @Component...src/app/hero.ts export class Hero {  id: number;  name: string;} 回到 HeroesComponent 类,并且导入这个 Hero 类。...修改后的 HeroesComponent 类应该是这样的: src/app/heroes/heroes.component.ts import {Component, OnInit} from '@angular...也就是说,数据流从组件类流出到屏幕,并且从屏幕流回到组件类。 要想让这种数据流动自动化,就要在表单元素  和组件的 hero.name 属性之间建立双向数据绑定。...Angular CLI 在创建项目的时候就在 src/app/app.module.ts 中生成了一个 AppModule 类。 这里也就是你要添加 FormsModule 的地方。

    2.6K70

    Angular 英雄编辑器

    HeroesComponent 的类文件如下: heroes.component.ts import { Component, OnInit } from '@angular/core';   @Component...src/app/hero.ts export class Hero {   id: number;   name: string; } 回到 HeroesComponent 类,并且导入这个 Hero...修改后的 HeroesComponent 类应该是这样的: src/app/heroes/heroes.component.ts import {Component, OnInit} from '@angular...也就是说,数据流从组件类流出到屏幕,并且从屏幕流回到组件类。 要想让这种数据流动自动化,就要在表单元素  和组件的 hero.name 属性之间建立双向数据绑定。...Angular CLI 在创建项目的时候就在 src/app/app.module.ts 中生成了一个 AppModule 类。 这里也就是你要添加 FormsModule 的地方。

    2.5K50

    Angular 5 快速入门与提高

    class EzComp{} 在Angular框架中,__组件__就是指一个应用了Component装饰器的类。...Component装饰器的作用, 就是为被装饰的类附加元数据信息: ? Angular框架对应用进行编译引导时,将使用这些元数据构造视图。...为了区别于JavaScript语言本身的模块概念,在本课程中将使用__NG模块__来 表示一个Angular模块。 类似于组件,NG模块就是一个应用了NgModule装饰器的类。...即时 编译的第一个问题是在应用中需要打包编译器代码,这增加了最终发布的应用代码的 大小;另一个问题在于编译需要时间,这增加了用户打开应用的等待时间。...七、理解Angular的初衷 除了框架本身的功能强大导致的复杂性,Angular的另一个复杂性来源在于 其高度封装的声明式API,让开发者难以揣摩、洞察框架的实现机制,因此使用 起来就很心虚,一旦出现问题则难以分析排错

    1.8K20

    AngularDart4.0 指南- 模板语法一 顶

    学习如何编写显示数据并在数据绑定的帮助下使用用户事件的模板。 Angular应用程序管理用户看到和可以做的事情,通过组件类实例(组件)和面向用户的模板的交互来实现这一点。...从数据绑定插值的第一种形式开始,看看有多少更丰富的模板HTML可以使用。请回到顶部。 插值({{...}}) 在Angular的早期教程中,你遇到了插值的双曲括号{{and}}。...你遇到的第一个绑定可能是这样的: 另一个特殊的例子。 按钮的disabled 属性(Properties)默认为false,因此按钮已启用。...一个示例是将图像元素的src属性绑定到组件的heroImageUrl属性: 另一个例子是当组件标识isUnchanged的时候禁用一个按钮: <button

    5.2K10
    领券