- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这种情况,我有一个名为 user-table-list
的组件,它基本上是一个表,其中包含代表一些用户的条目。
该组件被设计成有另一个组件,称为 table-list
,它描述了一个表及其对几个组件的行为(user-table-list
就是其中之一) ). user-table-list
的 html 实际上是这样的:
<app-table-list #table [tableConfiguration]="usersTableConfiguration"></app-table-list>
table-list
的 html 包含表格的所有设计,描述列、标题等...,而单个组件在 .ts 文件中描述其个人表格的配置,这意味着他们加载哪些数据来填充表、列的名称等等。
在标题中有一个按钮可以将新条目添加到表中,可以是用户或客户或其他任何内容。事件和数据库检索在 table-list.component.ts
中处理,它根据事件来自哪种类型的表执行不同的 onclick 操作。类似的东西:
createNewButtonClicked(tableType: string) {
const dialogConfig = new MatDialogConfig();
dialogConfig.width = '60%';
dialogConfig.autoFocus = true;
switch (tableType) {
case 'clients': {
this.dialog.open(ClientDialogComponent, dialogConfig);
break;
}
case 'projects': {
this.dialog.open(ProjectDialogComponent, dialogConfig);
break;
}
case 'users':{
this.dialog.open(UserDialogComponent, dialogConfig);
break;
}
}
}
在打开的对话框中,一个新的客户/项目/用户被添加到列表中。我想要的是在关闭对话框后通过调用数据库检索方法刷新列表。但是这种检索是在单个组件内部调用的,例如 user-table-list
。所以我正在寻找一种方法来调用检索方法并从外部刷新 user-table-list
的列表,而不必从浏览器刷新页面。问题是我无法实现,无论是在对话框组件还是表格列表组件中。我已经尝试在构造函数中导入组件并在对话框和表列表组件中调用该方法,但它会发出循环引用警告并且什么都不做。如果我创建一个外部服务来调用该方法,也是如此,因为总是存在循环引用。
我别无选择;如何做到这一点?
很遗憾,我无法更改应用程序设计。
最佳答案
假设您使用的是 Material 对话框,该对话框会为您提供一个可观察对象,您可以观察该对话框何时关闭。如果您将它设置为一个变量,您可以在它关闭时观察它,例如:
createNewButtonClicked(tableType: string) {
// your existing logic
// ...
const dialog = this.dialog.open(ClientDialogComponent, dialogConfig);
// example dialog .afterClosed
dialog.afterClosed().subscribe(closeResult => {
// update from database after dialog is closed
});
}
您可以使用 Output 属性告诉父组件子组件内部发生了一些事情。在订阅函数内部(我在其中添加评论以更新数据库)是您想要发出对话框已关闭的地方。您的列表代码可能如下所示: @Output() dialogClosed = new EventEmitter();
createNewButtonClicked(tableType: string) {
const dialogConfig = new MatDialogConfig();
dialogConfig.width = '60%';
dialogConfig.autoFocus = true;
let dialog;
switch (tableType) {
case 'clients': {
dialog = this.dialog.open(ClientDialogComponent, dialogConfig);
break;
}
case 'projects': {
dialog = this.dialog.open(ProjectDialogComponent, dialogConfig);
break;
}
case 'users':{
dialog = this.dialog.open(UserDialogComponent, dialogConfig);
break;
}
}
// check to see if dialog was opened
if (!!dialog) {
dialog.afterClosed().subscribe(closeResult => {
// emit that dialog was closed
this.dialogClosed.next();
});
}
}
然后在您的用户表组件中观察要发出的事件:
<app-table-list (dialogClosed)="onDialogClosed($event)"></app-table-list>
最后是你的用户表 ts。请注意,当对话框关闭时我没有调用 ngOnInit,因为 ngOnInit 的目的是初始化。所以将ngOnInit里面的数据库逻辑提取到另一个方法中,并在对话框关闭时调用这个方法来更新数据:
ngOnInit() {
this.getData();
}
onDialogClose() {
this.getData();
}
private getData() {
// make database calls here and update data from response
}
您应该只使用 ngOnInit 来初始化 View ,因为您可能会在此处设置一些您不想重置的默认值,因此建议不要在页面生命周期的后期再次调用 ngOnInit
关于javascript - Angular 7 调用 ngOnInit 方法或组件包含的任何其他组件方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56240779/
我正在尝试在项目中学习和添加 Angular 国际化。我只能理解 Angular 文档 (https://angular.io/guide/i18n-overview) 的编译时翻译。 我需要这样的东
在我的 Angular 应用程序中,基于登录用户,我想通过显示/隐藏不同的菜单项或允许/禁止某些路由来授予或限制功能。 目前成功登录后,我的 .NET Core API 会返回一个 JWT token
我是 Angular 的新手,目前我已经看过 angular.io 网站提供的一些示例。但是在component decorator在文档中的解释,它指出 Angular components are
这里是service employee-service.service.ts的代码 import { Injectable } from '@angular/core'; import { HttpC
我目前正在使用@angular/http URLSearchParams 类来检索 URL 参数。在 Angular 5 中,注意到这已被弃用,但我没有看到以我当前使用的方式替换 URLSearchP
我目前正在使用@angular/http URLSearchParams 类来检索 URL 参数。在 Angular 5 中,注意到这已被弃用,但我没有看到以我当前使用的方式替换 URLSearchP
如何正确安装 PUG/JADE 到 Angular 2 或更高版本 这样在工作和 AOT 和 JiT 的同时 工作单元和集成测试 并且在创建每个新组件时不会受到太多影响 最佳答案 我看到了很多解决方案
我的 Angular 12 应用程序中有一些通用组件,我计划将其创建为一个 Angular 库,以便其他应用程序也可以使用它。我们有一些应用程序在较低版本的 angular(例如 angular 8/
tl;dr; ng build 删除了包含我编译的自定义库的/dist 文件夹。这会使我项目代码中对该库的所有引用无效,从而导致 ng build 最终失败。我做错了什么? 我关注了documenta
我正在将一些“遗留”(非 typescript )js 库导入到我的 Angular SPA 中。 通常我只是从 cdn 添加一个负载到 index.html 就像: 在 Angular 分量中我只
我有这个 angular 应用程序,它基本上使用了库的概念。 我有 2 个名为 的库Lib1 和 lib2 根据他们所服务的微服务分组。 现在我将这些库导入主应用程序,即 应用1 事情一直到现在。 现
我在我的项目中启用了 angular Universal。我现在想完全删除它。我试图删除以下文件 /server.ts /webpack.server.config.js /src/tsconfig.
我已经有一个 AuthService 在登录时对用户进行身份验证,并且 AuthGuard 在未登录的情况下阻止访问。 某些页面我通过 UserProfile/Role 限制访问,但现在我需要阻止页面
我正在尝试使用 angular、TypeORM、SQLite 和其他组件作为 webpack 构建 Electron 应用程序。 我从在 GitHub 上找到的示例开始我的开发:https://git
我在从 Angular 8 更新到 9 并运行时遇到以下错误 ng 更新@angular/material: Package "@angular/flex-layout" has an incompa
我正在尝试使用 Angular 9,我想创建一个项目,然后创建一个库项目并开始向其中添加我想稍后在 GitHub 上发布的通用模块,并在我的本地使用这些库项目。 相关依赖如下: Angular CLI
我正在尝试使用 Angular 9,我想创建一个项目,然后创建一个库项目并开始向其中添加我想稍后在 GitHub 上发布的通用模块,并在我的本地使用这些库项目。 相关依赖如下: Angular CLI
我正在我的 h1 元素“之前”创建一个小的程式化三 Angular 形图案,但我无法正确地圆 Angular 。右上角没问题,但其他两个有剪裁问题。 这是输出以及形状的放大图像: 使用的代码如下: h
我有一个 Angular 元素,带有自定义标记名 - fancy-button。如何将 fancy-button 嵌入 Angular 应用程序? 我已经尝试了以下方法,但都没有用 - 在 index
我已将我的项目从 angular 5.2.9 升级到 angular 6.0.0-rc.5。 除了包路径中的几个快速 RxJS 修复外,一切看起来都不错。(此链接非常有用:Want to upgrad
我是一名优秀的程序员,十分优秀!