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

内含路由器链接的NgFor按钮

基础概念

NgFor 是 Angular 框架中的一个结构指令,用于在模板中迭代数组或对象集合,并为每个元素生成相应的 DOM 元素。它通常与 *ngFor 语法一起使用。

相关优势

  1. 简洁性:通过 *ngFor 可以简洁地遍历数组并在模板中生成重复的元素。
  2. 动态更新:当数组发生变化时,Angular 会自动更新 DOM,无需手动操作。
  3. 灵活性:可以轻松地与其他 Angular 指令和组件结合使用。

类型

NgFor 主要有以下几种用法:

  • 遍历数组
  • 遍历对象集合
  • 使用索引
  • 使用 trackBy 函数优化性能

应用场景

  1. 列表渲染:在网页中渲染列表数据,如商品列表、用户列表等。
  2. 动态表单:生成动态表单控件,根据数据动态添加或删除表单项。
  3. 导航菜单:根据数据生成导航菜单项。

示例代码

假设我们有一个包含路由器链接的按钮列表,可以使用 NgFor 来生成这些按钮:

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

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  buttons = [
    { label: 'Home', link: '/home' },
    { label: 'About', link: '/about' },
    { label: 'Contact', link: '/contact' }
  ];
}
代码语言:txt
复制
<!-- app.component.html -->
<ul>
  <li *ngFor="let button of buttons">
    <a routerLink="{{ button.link }}">{{ button.label }}</a>
  </li>
</ul>

遇到的问题及解决方法

问题:按钮点击后页面没有跳转

原因

  1. 路由配置不正确。
  2. routerLink 指令使用错误。

解决方法

  1. 确保路由配置正确,例如:
代码语言:txt
复制
// app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { AboutComponent } from './about/about.component';
import { ContactComponent } from './contact/contact.component';

const routes: Routes = [
  { path: 'home', component: HomeComponent },
  { path: 'about', component: AboutComponent },
  { path: 'contact', component: ContactComponent },
  { path: '', redirectTo: '/home', pathMatch: 'full' }
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})
export class AppRoutingModule {}
  1. 检查 routerLink 指令的使用是否正确:
代码语言:txt
复制
<a routerLink="{{ button.link }}">{{ button.label }}</a>

问题:按钮列表渲染不正确

原因

  1. 数据源问题,数组可能为空或格式不正确。
  2. trackBy 函数未正确使用,导致 Angular 无法高效更新 DOM。

解决方法

  1. 确保数据源正确:
代码语言:txt
复制
buttons = [
  { label: 'Home', link: '/home' },
  { label: 'About', link: '/about' },
  { label: 'Contact', link: '/contact' }
];
  1. 使用 trackBy 函数优化性能:
代码语言:txt
复制
// app.component.ts
trackByFn(index: number, item: any): number {
  return index;
}
代码语言:txt
复制
<ul>
  <li *ngFor="let button of buttons; trackBy: trackByFn">
    <a routerLink="{{ button.link }}">{{ button.label }}</a>
  </li>
</ul>

通过以上方法,可以有效解决在使用 NgFor 渲染包含路由器链接的按钮时遇到的常见问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python最常见的加密方式和python实现(内含网址链接和全套资料)

前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes。 将字符串和Bytes互相转换可以使用encode()和decode()方法。 ?...URL编码 正常的URL中是只能包含ASCII字符的,也就是字符、数字和一些符号。而URL编码就是一种浏览器用来避免url中出现特殊字符(如汉字)的编码方式。 ?...所有的数据都能被编码为并只用65个字符就能表示的文本文件。 Python内置的base64模块可以直接进行base64的编解码 ?...特点 1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。 2、容易计算:从原数据计算出MD5值很容易。 3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。...因为RSA加密算法的特性,RSA的公钥私钥都是10进制的,但公钥的值常常保存为16进制的格式,所以需要将其用int()方法转换为10进制格式。 ?

1.2K20

AngularDart4.0 英雄之旅-教程-07路由 顶

要在其他地方导航,用户可以单击AppComponent中的两个链接之一,或单击浏览器的后退按钮。...如本页“路由链接”部分所述,AppComponent模板中的顶级导航将路由器链接设置为目标路由,/dashboard 和/ heroes的固定名称。 这次,您绑定到包含链接参数列表的表达式。...按钮的点击事件绑定到一个gotoDetail()方法,该方法应该通过告诉路由器去哪里命令性地导航。 这种方法需要对组件类进行以下更改: 导入angular_router。...使AppComponent中的导航链接更像可选按钮。...你走过的路 以下是您在此页面中所取得的成果: 您添加了Angular路由器来浏览不同的组件。 您了解了如何创建路由器链接来表示导航菜单项。 您使用路由器链接参数导航到用户选择的英雄的细节。

17.6K30
  • 一杯喜茶的时间实战Deno:Deno+MongoDB(内含项目Demo链接)

    Deno常见的一些坑 在实战之前,还是先来介绍几个我在刚接触Deno时遇到的小坑。 权限标志符位置的问题 我们都知道,Deno默认是安全的,就是导致了默认情况下是不允许访问网络、读写文件等。...其实Deno官方文档已经帮我们分好类的了,入口地址分别是: 稳定的API文档[4] 不稳定的API文档[5] 如果你怀疑--unstable的作用,可以使用下面的方法打印出Deno上的所有成员: console.log...说明稳定的API有88个,不稳定的有29个。 Deno的一些使用技巧 从Node切换到Deno,我们的开发思维也要随之转变。所以,我们再来看看Deno的一些和Node不一样的开发技巧。...「.deno_plugins」:这是mongo模块所下载的动态链接库,不用关注它 「congig/db.ts」:这是连接Mongodb的相关配置文件。...同样的,我们使用Deno也要选择对应的框架,不然http服务以及路由跳转等都不是那么容易处理的。Deno上的这类框架,比较多人star的是oak[8]和abc[9],这里我们选择使用abc。

    96220

    Angular 快速学习笔记(1) -- 官方示例要点

    Angular 的复写器(repeater)指令,使用let xx of xxs遍历 绑定click使用 (click) ngFor="let hero of heroes" (click...Angular 的最佳实践之一就是在一个独立的顶级模块中加载和配置路由器,它专注于路由功能,然后由根模块 AppModule 导入它 b. ng generate module app-routing...添加路由 ,路由定义 会告诉路由器,当用户点击某个链接或者在浏览器地址栏中输入某个 URL 时,要显示哪个视图,因此路由包含两个属性: i. path:一个用于匹配浏览器地址栏中 URL 的字符串...要使用路由,必须首先初始化路由器,并让它开始监听浏览器中的地址变化 b....*ngFor 不能直接使用 Observable。 不过,它后面还有一个管道字符(|),后面紧跟着一个 async,它表示 Angular 的 AsyncPipe。

    3.6K00

    Angular 快速学习笔记(1) -- 官方示例要点

    Angular 的复写器(repeater)指令,使用let xx of xxs遍历 绑定click使用 (click) ngFor="let hero of heroes" (click...Angular 的最佳实践之一就是在一个独立的顶级模块中加载和配置路由器,它专注于路由功能,然后由根模块 AppModule 导入它 b. ng generate module app-routing...添加路由 ,路由定义 会告诉路由器,当用户点击某个链接或者在浏览器地址栏中输入某个 URL 时,要显示哪个视图,因此路由包含两个属性: i. path:一个用于匹配浏览器地址栏中 URL 的字符串...要使用路由,必须首先初始化路由器,并让它开始监听浏览器中的地址变化 b....*ngFor 不能直接使用 Observable。 不过,它后面还有一个管道字符(|),后面紧跟着一个 async,它表示 Angular 的 AsyncPipe。

    3.7K50

    不要在按钮、链接或任何其他文本容器上使用固定的 CSS 高度或宽度

    免费体验 Gpt4 plus 与 AI作图神器,我们出的钱 体验地址:体验 为什么 尽管一些网页设计工具为按钮等元素指定了 CSS 高度值,但设置高度或最大高度实际上可能会违反 WCAG 2.2 Success...如果对影响元素计算高度和宽度的 CSS 属性使用固定值,当文字大小增大时,元素内部的文字会被截断。 还不信服? 你可能会想:"但当我把浏览器放大到 200% 时,按钮文本看起来很好!"...演示 1 首先,我们看看在 font-size 、 height 、 line-height 和 width 使用固定值的情况下,当文字大小增大时会发生什么。在文字大小增大之前,按钮看起来很棒!...,并尝试在 line-height 和 padding 中不使用单位,以影响按钮的 height 和 width 。...根据我的经验,随着视口尺寸的缩小,我发现这种方法更难维护。 想象一下,一个具有大文本大小设置的移动设备。使用 em 单位设置的文本容器可能会比视口宽。

    12210

    一键点击链接(按钮)下载js(jquery.qrcode)生成的二维码图片

    上周日最得意的事情莫过于搞定了jquery.qrcode生成的二维码图片一键下载。...有时候觉得已经生成了二维码图片,直接打印就行了,但是用户总有新需求诞生,于是用户说每次保存二维码的图片,都需要右键点击,然后另存为,能不能直接一个按钮点一下就下载这个二维码呢?...能不能直接把二维码图片的名称也在保存的时候自动生成?我的上帝呀,你可以知道你的这么一个小小的要求,我需要折腾多久吗?没错,困扰了1周,最后思考了半天,弄了2个小时程序,才实现了。...中间走了不少弯路,期间参考了《点击按钮保存网页中指定的图片,利用js实现》,可惜jquery.qrcode所生成的图片(我用的是image的渲染方式,因为只有这种方式打印的时候能被直接默认打印出来,canvas...,于是诞生了以下可执行的代码。

    4.8K20

    AngularDart4.0 指南- 表单 顶

    通过将以下链接插入到index.html的中来添加Bootstrap样式:web/index.html (bootstrap) <link rel="stylesheet" href...您将在表单中添加一个select,并使用ngFor(先前在“显示数据”页面中看到的一种技术)将选项绑定到powers列表。...指令的exportAs属性告诉Angular如何将引用变量链接到指令。 您将name设置为“ngForm”,因为ngModel指令的exportAs属性是“ngForm”。...如果没有Angular的帮助,你需要做什么才能将按钮的启用/禁用状态连接到表单的有效性? 对你来说,这很简单: 在(增强的)表单元素上定义一个模板引用变量。 在多处的按钮中引用该变量。...提交的标志变为真,表格消失。 您将看到表格中显示的英雄模型值(只读)。 ? 该视图包含一个编辑按钮,其单击事件绑定将清除提交的标志。 当您单击编辑按钮时,该表消失,并且可编辑的表单重新出现。

    17.5K30

    Angular快速学习笔记(2) -- 架构

    比如,要在你的应用中使用路由器(Router)服务,就要导入 Router 这个 NgModule。 1.1.1 定义一个模块 一个NgModule就是一个使用@NgModule 装饰器的类。...但是,任何模块都能包含任意数量的其它组件,这些组件可以通过路由器加载,也可以通过模板创建。那些属于这个 NgModule 的组件会共享同一个编译上下文环境。 ?...Hero List Pick a hero from the list ngFor="let hero of heroes" (click...结构型指令 结构型指令通过添加、移除或替换 DOM 元素来修改布局 ngFor="let hero of heroes"> 的工作模型基于人们熟知的浏览器导航约定: 在地址栏输入 URL,浏览器就会导航到相应的页面 在页面中点击链接,浏览器就会导航到一个新页面 点击浏览器的前进和后退按钮,浏览器就会在你的浏览历史中向前或向后导航

    5.3K20

    Angular4记账webApp练手项目之二(在angular4项目中使用Angular WeUI)

    1、如何使用第三方库,安装-引用(主要参考官方文档) 2、{{}}指令,单向绑定数据,声明数据-绑定数据 3、[(ngModel)]指令,双向绑定数据,声明数据-绑定数据 4、*ngFor指令,循环渲染...: n}); n++; } } ngOnInit() { } } 修改accounting.component.html文件布局,添加标题,金额输入框,记账类型选择按钮...-- 九宫格按钮 --> ngFor="let b of...这里写图片描述 解决上面问题,有两个思路,1、固定底部和顶部,2、固定中间按钮。...我选择固定中间按钮,使用动态绑定样式让中间部分的高度等于页面高度-底部和顶部的高度,设置overflo为scroll; 在accounting.component.ts中添加样式数据如下: contentStyle

    2.2K20

    AngularDart 4.0 高级-生命周期钩子 顶

    其他生命周期挂钩 其他Angular子系统除了这些组件钩子可能有自己的生命周期钩子。 例如,路由器也有自己的路由器生命周期挂钩,可以让我们利用路由导航中的特定时刻。...此示例将SpyDirective应用于由父SpyComponent管理的ngFor英雄迭代器中的。...此快照反映用户单击“创建...”按钮然后单击“销毁...”按钮后日志的状态。 ?...在这里它被附加到重复的英雄 ngFor="let hero of heroes" mySpy class="heroes"> {{hero}} 每个间谍的出生和死亡标志着所附英雄...添加一个英雄会产生一个新的英雄。 间谍的ngOnInit记录该事件。 重置按钮清除英雄列表。 Angular从DOM中移除所有英雄元素并同时销毁他们的间谍指令。

    6.2K10

    AngularDart4.0 英雄之旅-教程-08HTTP 顶

    刷新浏览器,更改英雄名称,保存更改,然后单击浏览器“后退”按钮。 现在应该继续进行更改。 添加加入英雄的能力 要添加英雄,应用程序需要英雄的名字。 您可以使用与添加按钮配对的输入元素。...添加删除英雄的能力 英雄视图中的每个英雄都应该有一个删除按钮。 将以下按钮元素添加到英雄组件HTML中,位于重复的元素中的英雄名称之后。...正如所料,* ngFor从组件的英雄属性重复英雄对象。 但正如你很快就会看到的,英雄的财产现在是一个英雄列表的流,而不仅仅是一个英雄名单。...* ngFor只能通过异步管道(AsyncPipe)进行路由才能对Stream执行所有操作。 异步管道subscribes 流并产生* ngFor的英雄列表。...相反,您可以将减少请求流的Stream运算符链接到字符串Stream。 您将减少对HeroSearchService的调用,并且仍然可以得到及时的结果。

    11K30

    AngularDart4.0 英雄之旅-教程-04明细 顶

    通过添加核心指令* ngFor修改标签。 ngFor="let hero of heroes"> ngFor的前缀(*)是此语法的关键部分。...ngFor指令遍历组件的英雄列表并为该列表中的每个英雄呈现该模板的一个实例。 表达式部分将hero标识为模板输入变量,其中包含每个迭代的英雄详情。...在显示数据的Showing a list property with *ngFor部分阅读更多关于ngFor和模板输入变量和模板语法页的ngFor部分 在节点内添加内容hero模板变量来显示英雄属性...接下来,您将通过selectedHero组件属性将主链接到详细信息,该属性绑定到单击事件。...这是你在ngFor指令中定义的同一个英雄变量。 在用户输入页面和模板语法页面的事件绑定部分了解有关事件绑定的更多信息。

    3K30
    领券