我遇到了一个问题,当我试图使用来自其父组件的Observable的数据来渲染子组件时,然后使用async pipe将数据转换为列表对象并使用 *NgFor渲染它.我做到了:

  1. Generate Observable Data in Parent Component:

    // Parent Component
    dataSet$!: Observable<Data[]>;
    
    ngOnInit() {
      this.dataSet$ = this.serviceData.getData();
    }
    
  2. Send Data from Parent to Child Using Async Pipe:

    <!-- Parent Component Template -->
    <ng-container *ngIf="dataSet$ | async as dataSet">
      <app-row-data-list *ngFor="let data of dataSet" [data]="data"></app-row-data-list>
    </ng-container>
    
  3. Child Component with @Input Property:

    // Child Component
    export class RowDataListComponent {
      @Input() data!: Data;
    }
    

然而,数据并没有按照预期呈现.子组件不会出现.


到目前为止,我try 的是以下答案中提到的修复:

但我没能用那些修好它.我也找了很多. 实际上,我有几个小时在做这件事,所以如果有人能帮我的话.

非常感谢.

Edit:在这里答案的帮助下,我能够修复它. 我执行了以下操作(查看Stack Blitz示例):

https://angular-child-parent-communication-example-uxz7dg.stackblitz.io

推荐答案

我不确定您的确切代码是什么,但您可以在这里看到一个有效的示例:

interface Item {
  userId: number;
  id: number;
  title: string;
  completed: boolean;
}

type Items = Item[];

@Injectable({ providedIn: 'root' })
class DataService {
  private http = inject(HttpClient);

  getData() {
    return this.http.get<Items>(`https://jsonplaceholder.typicode.com/todos`);
  }
}

@Component({
  selector: 'app-child',
  standalone: true,
  template: `
    <pre>{{item() | json}}</pre>
  `,
  changeDetection: ChangeDetectionStrategy.OnPush,
  imports: [JsonPipe],
})
export class ChildComponent {
  item = input<Item>();
}

@Component({
  selector: 'app-root',
  standalone: true,
  template: `
    <h1>Hello from {{ name }}!</h1>
    <app-child *ngFor="let data of (data$ | async)" [item]="data"></app-child>
  `,
  changeDetection: ChangeDetectionStrategy.OnPush,
  imports: [ChildComponent, NgFor, AsyncPipe],
})
export class App {
  name = 'Angular';

  private dataService = inject(DataService);

  data$ = this.dataService.getData().pipe(startWith([]), share());
}

bootstrapApplication(App, { providers: [provideHttpClient()] });

Seestackblitz

Typescript相关问答推荐

如何传递基于TypScript中可变类型的类型?

Typescript对每个属性具有约束的通用类型

ReturnType此索引方法与点表示法之间的差异

扩展函数签名中的参数类型,而不使用泛型

如何设置绝对路径和相对路径的类型?

如何提取密钥及其对应的属性类型,以供在新类型中使用?

在映射类型中用作索引时,TypeScrip泛型类型参数无法正常工作

一个打字类型可以实现一个接口吗?

如果数组使用Reaction-Hook-Form更改,则重新呈现表单

有没有一种方法可以确保类型的成员实际存在于TypeScript中的对象中?

try 呈现应用程序获取-错误:动作必须是普通对象.使用自定义中间件进行MySQL操作

为什么&Quot;元素隐式具有';Any';类型,因为...即使我已经打字了,也不能作为索引显示错误吗?

ANGLE NumberValueAccessor表单控件值更改订阅两次

如何使用泛型函数参数定义类型脚本函数

作为函数参数的联合类型的键

如何键入并类型的函数&S各属性

顶点堆叠的图表条形图未在正确的x轴上显示

为什么类型脚本使用接口来声明函数?他的目的是什么.

递归JSON类型脚本不接受 node 值中的变量

两个接口的TypeScript并集,其中一个是可选的