javascript - 我有一个服务,它是生成工具栏,有几个类
问题描述
班级菜单
import { QueryParam } from "./query-param";
import { QueryRouterLink } from "./query-router-link";
export class Menu {
link: string;
name: string;
queryParam: QueryParam[];
queryRouterLink?: QueryRouterLink;
}
类查询参数
export class QueryParam {
name: string;
value: string;
}
类 QueryRouterLink
export class QueryRouterLink {
[name: string]: string;
}
我的服务
import { Injectable } from "@angular/core";
import { Menu } from "../classes/menu";
import { QueryParam } from "../classes/query-param";
import { QueryRouterLink } from "../classes/query-router-link";
@Injectable({
providedIn: "root",
})
export class LinksService {
constructor() {}
queryRouterLink: QueryRouterLink;
autoMenu() {
let myMenu: Menu[] = [
{
link: `/componentOne`,
name: "ComponentOne",
queryParam: [{ name: "resource", value: "ComponentOne" }],
},
{
link: `/componentTwo`,
name: "ComponentTwo",
queryParam: [{ name: "resource", value: "ComponentTwo" }],
},
];
for (let menuItem of myMenu) {
menuItem.queryRouterLink = this.getCorrectQueryParam(
menuItem.queryParam as QueryParam[]
);
}
return myMenu;
}
getCorrectQueryParam(queryParam: QueryParam[]) {
for (let param of queryParam) {
this.queryRouterLink[param.name] = param.value;
}
return this.queryRouterLink;
}
}
getCorrectQueryParam 将我的 queryParam[name: 'resource', value: "ComponentTwo"] 转换为通常的 QueryParams [name: string]: string; 控制台中的错误是无法设置未定义的属性“资源”。这是否意味着名称未定义?还是我的功能工作错了?
我的 app.html
<mat-toolbar>
<h1
*ngFor="let item of menu"
[routerLink]="item.link"
[queryParams]="item.queryRouterLink"
>
{{ item.name }}
</h1>
</mat-toolbar>
<router-outlet></router-outlet>
我的 app.ts
import { Component, OnInit } from "@angular/core";
import { LinksService } from "./services/links.service";
import { Menu } from "./classes/menu";
@Component({
selector: "app-root",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.scss"],
})
export class AppComponent implements OnInit {
title = "training";
menu: Menu[];
constructor(private linkS: LinksService) {}
ngOnInit() {
this.menu = this.linkS.autoMenu();
}
}
解决方案
所以答案是:
import { Injectable } from "@angular/core";
import { Menu } from "../classes/menu";
import { QueryParam } from "../classes/query-param";
import { QueryRouterLink } from "../classes/query-router-link";
@Injectable({
providedIn: "root",
})
export class LinksService {
constructor() {}
queryRouterLink: QueryRouterLink; <===== wrong
autoMenu() {
let myMenu: Menu[] = [
{
link: `/componentOne`,
name: "ComponentOne",
queryParam: [{ name: "resource", value: "ComponentOne" }],
},
{
link: `/componentTwo`,
name: "ComponentTwo",
queryParam: [{ name: "resource", value: "ComponentTwo" }],
},
];
for (let menuItem of myMenu) {
menuItem.queryRouterLink = this.getCorrectQueryParam(
menuItem.queryParam as QueryParam[]
);
}
return myMenu;
}
getCorrectQueryParam(queryParam: QueryParam[]) {
let queryRouterLink: QueryRouterLink = {}; <====correct
for (let param of queryParam) {
this.queryRouterLink[param.name] = param.value;
}
return this.queryRouterLink;
}
}
推荐阅读
- angular - 处理 flex 容器内 Angular 组件的高度
- grep - Grep {n} 前面的项目恰好匹配 n 次,对于“Hair”、“Haair”和“Haaair”的情况我不清楚
- asp.net - 我收到 ajax Requested page not found 错误这是怎么回事
- python - Tkinter:如何从其他方法访问 init 方法中的小部件
- objective-c - 集成到应用程序时无法构建 MessageKit
- react-native - React Native:基于 AsyncStorage 结果的条件渲染()
- python - python中的逻辑与运算
- python - 根据连续行之间的时间差标记重复项
- java - 如何在java中动态创建XML元素?
- c++ - 类元素加入的 C++ 自动迭代器向量