angular踩坑
1 新版路由守卫由于canActivate已被废弃,采用函数函数,但其参数中无法像类一样进行路由对象注入,如何实现路由首位中的页面跳转?
import { CanActivateFn,Router,ActivatedRouteSnapshot, RouterStateSnapshot,} from '@angular/router';
import{inject} from "@angular/core"export const authorGuard: CanActivateFn = (route:ActivatedRouteSnapshot, state:RouterStateSnapshot) => {if(localStorage.getItem("token")){}else{// const router = route?._routerState._root.injector.get(Router) as Router; // 获取Router实例const router =inject(Router); // 通过参数注入 Router 对象router.navigate(['/login']); // 导航到登录页面// this.router.navigate(['/login']); // 导航到登录页面return false; // 阻止导航到目标路由}return true;
};
这里采用inject强制注入得到router对象。这样就可以实现路由的跳转
2 对于路由懒加载方式,需要在app.module.ts和当前module.ts中同时引入相关模块。否则会报错。比如
'nz-form-control' is not a known element:
原因就是NzFormModule只在app.moudule.tsz中引入了,但是却没有在当前页面的组件的module中引入导致一直报错
3 nozzor-antd中的nz-space组件要想生效,必须加入*nzSpaceItem
4 模板中遍历的数据如何获取当前对象的属性值,如下:
constructor(private fb:FormBuilder){this.validateForm=this.fb.group({storename:[''],tableSize:this.fb.group({toggle:['true'],groupSize:this.fb.array([this.fb.group({cate:['indoor'],title_en:[''],title_zh:[''],}),this.fb.group({cate:['outdoor'],title_en:[''],title_zh:[''],}),]),}),})}<form class="store_generate_form" nz-form [formGroup]="validateForm" (ngSubmit)="submitForm()"><nz-form-item><nz-form-label [nzSpan]="8" nzFor="storename">店铺名称</nz-form-label><nz-form-control [nzSpan]="16"><input nz-input name="storename" type="storename" formControlName="storename"></nz-form-control></nz-form-item ><div><nz-form-item><nz-tab [nzTitle]="group.value.cate" *ngFor="let group of groupSize.controls; let i = index" [formGroupName]="i"></nz-form-item> </div>
这里的tab标签页的tab的名称要根据cate字段来读取。这里的方式是通过[nzTitle]="group.value.cate"来获取的。对于每一个control而言,其下都有一个value属性,通过value属性就可以获取到原始的json数据对象
6 zorro中如何实现tabs标签页添加额外内容?
<nz-tabset nzType="card" formArrayName="groupSize" [nzTabBarExtraContent]="extraContent" (nzAdd)="addTab()"><ng-template #extraContent><button nz-button nzType="dashed">Add</button></ng-template><nz-tab nzIcon="book" ><ng-template nz-tab>tab中的内容xxxx</ng-template></nz-tab><ng-container *ngTemplateOutlet="extraContent"></ng-container></nz-tabset>
通过定义tabExtraContent
模板引用,其中包含自定义的文本内容。然后,在nz-tabset
内部使用<ng-container>
元素,并使用*ngTemplateOutlet
指令将tabExtraContent
引用的内容渲染在页面指定位置。
通过这种方式,你可以将默认的"+"样式替换为自定义的文本("Add"按钮),并在页面中正确渲染。
7 给formArray对象添加group数据的时候,切记每一项的字段名称要对应,否则会报错
RROR Error: Cannot find control with path: 'tableSize -> groupSize -> 0 -> tableSize -> 2 -> minPerson'
例如:
<nz-tab nzIcon="book" [nzTitle]="group.value.cate" *ngFor="let group of groupSize.controls; let i = index" [formGroupName]="i"><div formArrayName="tableSize"> <ng-template nz-tab><nz-form-item *ngFor="let table of tableSizeControls(i)?.['controls']; let j = index" [formGroupName]="j"><nz-form-control><div class="danamic_group"> <div class="danamic_group_item"><nz-input-group nzAddOnBefore="Key" ><input nz-input type="text" nz-input formControlName="size"/></nz-input-group></div><div class="danamic_group_item" ><nz-input-group nzAddOnBefore="EN" ><input nz-input type="text" nz-input formControlName="desc_en"/></nz-input-group></div><div class="danamic_group_item" ><nz-input-group nzAddOnBefore="CH"><input nz-input type="text" nz-input formControlName="desc_zh"/></nz-input-group></div><div class="danamic_group_item" ><nz-input-group nzAddOnBefore="number"><input nz-input type="text" nz-input formControlName="number"/></nz-input-group></div><div class="danamic_group_item" ><nz-input-group ><nz-input-number [nzMin]="1" type="text" nz-input formControlName="minPerson"/></nz-input-group></div><div class="danamic_group_item"><nz-input-group ><nz-input-number [nzMin]="1" type="text" nz-input formControlName="maxPerson"/></nz-input-group></div></div></nz-form-control></nz-form-item> </ng-template> </div></nz-tab>
注意在ngfor中最后两个formControlName分别是minPerson和maxPerson,接下来在js文件中给formArray添加一条新的数据
get groupSize(): FormArray { return this.validateForm.get('tableSize.groupSize') as FormArray;}tableSizeControls(index:number): FormArray {let list=this.validateForm.get('tableSize.groupSize') as FormArray;let lastlist=list.controls[index].get('tableSize') as FormArray ||[]return lastlist}add(){//先找到是indoor还是outdoor的tablsesizeconsole.log("this.activeTab",this.actvieTabIndex)let newdata=this.fb.group({size: [""],desc_en:[""],desc_zh: [""],number:[''],preTitle: [""],maxPerson: [],})let curTableSizeArr=this.tableSizeControls(this.actvieTabIndex) as FormArrayconsole.log("curTableSizeArr",curTableSizeArr)curTableSizeArr.push(newdata)console.log("curTableSizeArr",curTableSizeArr)}remove(){ let curTableSizeArr=this.tableSizeControls(this.actvieTabIndex) as FormArraycurTableSizeArr.removeAt(curTableSizeArr.length-1)}
注意我们在add函数中定义的数据newdata其中的字段,没有minPerson,此时就会报错。此时需要我们核实字段。我们更改perTtile为minPerson以后。报错消失
相关文章:
angular踩坑
1 新版路由守卫由于canActivate已被废弃,采用函数函数,但其参数中无法像类一样进行路由对象注入,如何实现路由首位中的页面跳转? import { CanActivateFn,Router,ActivatedRouteSnapshot, RouterStateSnapshot,} from angular/ro…...

C#时间轴曲线图形编辑器开发1-基本功能
目录 一、前言 1、简介 2、开发过程 3、工程下载链接 二、基本功能实现 1、绘图面板创建 (1)界面布置 (2)显示面板代码 (3) 面板水平方向、竖直方向移动功能实现 (4)面板放…...

elasticsearch查询操作(DSL语句方式)
说明:本文介绍在kibana,es的可视化界面上对文档的查询操作; 添加数据 先使用API,创建索引库,并且把数据从MySQL中查出来,传到ES上,参考(http://t.csdn.cn/NaTHg) 索引库…...

JavaScript详解
目录 一、JavaScript是什么? 1.1、JavaScript 和 HTML 和 CSS 之间的关系 1.2、JavaScript 运行过程 1.3、JavaScript 的组成 二、JavaScript 的书写形式 1. 行内式 2. 内嵌式 3、外部式 注释 三、输入输出 输入: prompt 输出: alert 输出: …...

电缆振荡波局部放电检测定位技术
电缆振荡波检测技术主要用于交联聚乙烯电力电缆检测,是属于离线检测的一种有效形式 。该技术基于LCR阻尼振荡原理,在完成电缆直流充电的基础上,通过内置的高压电抗器、高压实时固态开关与试品电缆形成阻尼振荡电压波,在试品电缆上…...

AI Chat 设计模式:10. 组合模式
本文是该系列的第八篇,采用问答式的方式展开,问题由我提出,答案由 Chat AI 作出,灰色背景的文字则主要是我的一些思考和补充。 问题列表 Q.1 给我介绍一下组合模式A.1Q.2 好的,给我举一个组合模式的例子,使…...

【Nginx12】Nginx学习:HTTP核心模块(九)浏览器缓存与try_files
Nginx学习:HTTP核心模块(九)浏览器缓存与try_files 浏览器缓存在 Nginx 的 HTTP 核心模块中其实只有两个简单的配置,这一块也是 HTTP 的基础知识。之前我们就一直在强调,学习 Nginx 需要的就是各种网络相关的基础知识&…...

【1】-Locust性能测试工具介绍与安装
Locust介绍 locust是一个开源的压测工具,其官网地址是Locust - A modern load testing framework,通过编写Python代码,可以轻松实现百万级的并发,相对于我们熟悉的Jmeter来说,其对压测机的要求更低,而且使…...

基于拉格朗日-遗传算法的最优分布式能源DG选址与定容(Matlab代码实现)
目录 1 概述 2 数学模型 2.1 问题表述 2.2 DG的最佳位置和容量(解析法) 2.3 使用 GA 进行最佳功率因数确定和 DG 分配 3 仿真结果与讨论 3.1 33 节点测试配电系统的仿真 3.2 69 节点测试配电系统仿真 4 结论 1 概述 为了使系统网损达到最低值&a…...

【已解决】jupyter notebook里已经安装了第三方库,还是提示导入失败
在jupyter notebook中运行Python代码,明明已经安装了第三方库,还是提示导入失败。 以导入pandas库为例,其他库同理: 报错代码: import pandas报错原因: 电脑上存在多个python运行环境(比如&a…...

Mybatis使用collection映射一对多查询分页问题
场景:页面展示列表,需要查询多的字段,和一的字段。并且还要分页。 这时候直接想到的是手写sql。 /*** 标签*/private List<BasicResidentTags> tags;Data TableName("basic_resident_tags") public class BasicResidentTag…...
Linux/Windows路由管理
本文主要介绍如果通过linux/Windows命令添加IPV6地址,查看添加IPV6默认路由,查看IPV6邻居缓存 一、Linux 1、查看地址 IPV4: route netstat -route ip route IPV6: ip -6 route show route -A inet6 route -62、添加IPV6地址 ip -6 addr add <…...
openpnp - 设备矫正的零碎记录
文章目录 openpnp - 设备矫正的零碎记录概述笔记设备内部不能有任何强干扰源相机就选100W像素的就行, 没有特殊要求openpnp软件的选择视觉归位必须禁止轴的赤隙矫正不用做运行openpnp软件的计算机, 必须是台式机校验完成后, 数据占用的体积END openpnp - 设备矫正的零碎记录 概…...

Linux内核中的链表、红黑树和KFIFO
lLinux内核代码中广泛使用了链表、红黑树和KFIFO。 一、 链表 linux内核代码大量使用了链表这种数据结构。链表是在解决数组不能动态扩展这个缺陷而产生的一种数据结构。链表所包含的元素可以动态创建并插入和删除。链表的每个元素都是离散存放的,因此不需要占用连…...

【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动
[导读]本系列博文内容链接如下: 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 在【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值一文中介绍了如何利用…...
Android 设备兼容性使用(详细版)
经典好文推荐,通过阅读本文,您将收获以下知识点: 一、设备兼容性分类 二、硬件设备兼容 三、软件 APP 兼容 四、兼容不同语言 五、兼容不同分辨率 六、兼容不同屏幕方向布局 七、兼容不同硬件 Feature 八、兼容不同SDK平台 一、设备兼容性分类 Android设计用于运行在许多不同…...
React 中的常见 API 和生命周期函数
目录 useStateuseEffectuseRefdangerouslySetInnerHTML生命周期函数 constructorcomponentDidMountstatic getDerivedStateFromPropsshouldComponentUpdatecomponentDidUpdatecomponentWillUnmount useState useState 是 React 的一个 Hook,用于在函数组件中添加…...
神经网络中遇到的 python 函数(Pytorch)
1.getattr() 函数用于返回一个对象属性值。 def getattr(object, name, defaultNone): # known special case of getattr"""getattr(object, name[, default]) -> valueGet a named attribute from an object; getattr(x, y) is equivalent to x.y.When a …...

分布式事务及解决方案
1、分布式事务 分布式事务就是在一个交易中各个服务之间的相互调用必须要同时成功或者同时失败,保持一致性和可靠性。在单体项目架构中,在多数据源的情况下也会发生 分布式事务问题。本质上来说,分布式事务就是为了保证不同数据库的数据一致性…...
【宏定义】——编译时校验
文章目录 编译时校验功能描述代码实现示例代码正常编译示例编译错误示例预处理之后的结果 代码解析!!estruct {int:-!!(e); }sizeof(struct {int:-!!(e); }) 参考代码 编译时校验 功能描述 用于在编译时检查一个条件是否为真,如果条件为真则会编译失败,…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
linux 下常用变更-8
1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行,YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID: YW3…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...