我有以下函数从Angular 9服务返回数据:
@Injectable({
providedIn: 'root'
})
export class SecurityService {
constructor(private http: HttpClient) { }
public getFunds(): Observable<any> {
// could do a loader here, or in an interceptor - same for the post, put and delete
let data = this.http.get<any>("https://localhost:44337/security/").pipe(
map(response => response)
);
return data;
} }
服务按预期返回数据。我这样称呼它:
export class AppComponent {
funds$!: Observable<any>; // "!" turns off check to make sure vars are initialized, not good tho
constructor(private securityService: SecurityService) {}
ngOnInit() {
this.funds$ = this.securityService.getFunds();
this.securityService.getFunds().subscribe(f => (this.funds$ = f));
}
}
在我的html中,我尝试使用如下数据:
<tr *ngFor="let f of funds$">
<td>{{ f.id }}</td>
<td>{{ f.name }}</td>
<td>{{ f.assets }}</td>
</tr>
我得到这个错误:TS2322:类型'可观察'是不能分配给类型'任何[]|迭代|(迭代
这在几年前是可行的。显然,9改变了一些东西。。。
当您订阅observable时,它通过getFunds方法返回,最终返回数据。因此,无需将基金美元定义为可观察的。下面的代码可能会对您有所帮助。
funds: any[] = [];
ngOnInit() {
this.securityService.getFunds().subscribe(f => (this.funds = f));
}
}
在HTML中,使用ngFor中的资金变量。
当我们在超文本标记语言模板中使用异步管道
时,我们不必订阅异步管道中引用的可观察到的。异步管道在幕后为我们订阅它。因此,在组件中,我们只需要构建可观察的。
此外,在访问异步管道数据之前,需要使用*ngIF确保流可用。
在这些线上,有几个变化-
在你的组件中-
export class AppComponent {
funds$: Observable<any>;
constructor(private securityService: SecurityService) {}
ngOnInit() {
this.funds$ = this.securityService.getFunds(); // Only this line is enough
}
}
在HTML中-
<ng-container *ngIf="funds$">
<tr *ngFor="let f of funds$|async">
<td>{{ f.id }}</td>
<td>{{ f.name }}</td>
<td>{{ f.assets }}</td>
</tr>
</ng-container>
使用异步管道并将模板更改为:-
<ng-container *ngIf="funds$">
<tr *ngFor="let f of funds$|async">
<td>{{ f.id }}</td>
<td>{{ f.name }}</td>
<td>{{ f.assets }}</td>
</tr>
</ng-container>
我来自同步编程背景,我很难理解可观察性。 这是我的服务/提供商的摘录(离子2项目) 我将从订阅它。关于这一点,我有几个问题。 > 即使我没有声明,上面的代码是否返回一个可观察/观察者? 响应是JSON。如何检查/处理JSON并执行一些操作,如 那就做吧 我认为应该在提供者类中完成。只是一个典型的提示/例子将是真棒。 当请求到达subscribe方法时,它是否真的发生了? 创建和返回Angular
我有一个可观察的,可观察的是存储在本地存储器中的一组对象(视频)。我有这样的“功能”将新视频推送到阵列中:视频是一个接口 在其他组件中,我将其称为推送新对象(视频),如下所示: 但这行不通,我知道这是我的错。在observable之前,我使用了经典的常量和函数,工作得很好,现在我在observable方面遇到了麻烦。有人告诉我,我需要订阅一个管道,但我找不到任何地方如何做到这一点。对我来说,可见物
类定义为: 我继续创建对象: 使用以下工具进行检查: 打印: 但是在html模板中使用可以观察到: 引发: 如何解决这个问题?这里是Stackblitz项目的链接: https://stackblitz.com/edit/Angular-ivy-isebs7?file=src%2fapp%2fapp.component.ts
问题内容: 给定汽车清单(),我可以这样做: 有没有办法我可以从一个到一个序列? 像没有参数的东西 问题答案: 您可以这样映射到: 请注意,flatMapping可能不会保留源可观察的顺序。如果订单对您很重要,请使用。
我有一个servers对象数组,其中在数组中有另一个可观察对象数组,其键是[securityGroups]。 我有另一个securitygroupsArray数组,在这里我使用API来获取所有SecurityGroups。 我需要在securityGroups键中查找服务器阵列中该服务器上安全组的所有名称,并在一个选项中只显示我的其他阵列(securityGroupArray)的ngfor的不同名
我刚开始学习angular4,遇到了一个概念上的问题。管道(在本例中与结合使用)用于订阅可观察的,而不用手动订阅。查看web上的示例: 情况1:绑定到包含单个项(如