我对angular是个新手,开始学习angular 4。数据未与使用异步管道的组件上的ngfor
指令绑定。请帮忙
用户服务使用HTTP请求从API获取数据:
user.service.ts
import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
import { User } from "../Models/user";
@Injectable()
export class UserService {
constructor(private http: Http) { }
get(url: string): Observable<User[]> {
return this.http.get(url)
.map(response => response.json() as User[])
// .do(data => console.log("All: " + JSON.stringify(data)))
.catch(this.handleError);
}
private handleError(error: Response) {
console.error(error);
return Observable.throw(error.json().error || 'Server error');
}
}
在这里,我使用用户列表的可观察用户[]界面:
user.component.ts
import { Component, OnInit, ViewChild } from '@angular/core';
import { UserService } from '../Services/user.service';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { ModalComponent } from 'ng2-bs3-modal/ng2-bs3-modal';
import { User } from '../Models/user';
import { DBOperation } from '../Shared/enum';
import { Observable } from 'rxjs/Observable';
import { Global } from '../Shared/global';
@Component({
templateUrl: 'app/Components/user.component.html'
})
export class UserComponent implements OnInit {
@ViewChild('modal') modal: ModalComponent;
users$: Observable<User[]>;
user: User;
msg: string;
indLoading: boolean = false;
userForm: FormGroup;
dbops: DBOperation;
modalTitle: string;
modalBtnTitle: string
constructor(private fb: FormBuilder, private userService: UserService)
{ }
ngOnInit(): void {
this.userForm = this.fb.group({
Id: [''],
UserName: ['', Validators.required],
Password: ['', Validators.required],
FirstName: ['', Validators.required],
LastName: ['', Validators.required],
Gender: ['', Validators.required]
});
this.LoadUsers();
}
LoadUsers(): void {
this.indLoading = true;
this.users$ = this.userService.get('http://localhost:29712/api/userapi/');
this.indLoading = false;
}
}
订阅可观察用户变量的异步管道模板:
user.component.html
<div class='panel panel-primary'>
<div class='panel-heading'>
User Management
</div>
<div class='panel-body'>
<div class='table-responsive'>
<div class="alert alert-info" role="alert" *ngIf="indLoading"><img src="../../images/loading.gif" width="32" height="32" /> Loading...</div>
<div *ngIf='users && users.length==0' class="alert alert-info" role="alert">No record found!</div>
<table class='table table-striped' *ngIf='users && users.length'>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Gender</th>
</tr>
</thead>
<tbody>
<tr *ngFor="let user of users$ | async">
<td>{{user.FirstName}}</td>
<td>{{user.LastName}}</td>
<td>{{user.Gender}}</td>
</tr>
</tbody>
</table>
<div>
</div>
</div>
<div *ngIf="msg" role="alert" class="alert alert-info alert-dismissible">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
<span class="sr-only">Error:</span>
{{msg}}
</div>
</div>
您的*ngif正在制造问题,如果没有异步管道,您无法直接检查您的可观察长度。试试这个,
*ngIf="(users$ | async)?.length==0"
因为您使用的是异步。尝试删除susbcribe。在您的原始代码上。这里有一个类似的视频。将$用于可观察属性真的很有帮助。。。
我刚开始学习angular4,遇到了一个概念上的问题。管道(在本例中与结合使用)用于订阅可观察的,而不用手动订阅。查看web上的示例: 情况1:绑定到包含单个项(如
学习角得到服务和组件和可观察性。 我正在尝试在我的演示应用程序中实现暗模式。该控件由一个服务完成,该服务根据浏览器默认值(如果找到)设置暗主题。 它在应用程序组件中初始化,以便以后在应用程序中放置控制开关。 暗模式从布尔值开始工作,因此为true或false。据我所知,使用一个可观察对象是不够的,因为我希望多个订阅者都以两种方式绑定到订阅,每种方式在服务中切换这些可观察对象。到目前为止,我很肯定这
本文向大家介绍system.reactive 将异步方法包装为可观察的,包括了system.reactive 将异步方法包装为可观察的的使用技巧和注意事项,需要的朋友参考一下 示例 给定这样的async方法: IObservable<string>像这样包装它:
我有一个可观察的,可观察的是存储在本地存储器中的一组对象(视频)。我有这样的“功能”将新视频推送到阵列中:视频是一个接口 在其他组件中,我将其称为推送新对象(视频),如下所示: 但这行不通,我知道这是我的错。在observable之前,我使用了经典的常量和函数,工作得很好,现在我在observable方面遇到了麻烦。有人告诉我,我需要订阅一个管道,但我找不到任何地方如何做到这一点。对我来说,可见物
我有一个服务,有一个方法foo。在该方法中,我订阅了一个可观察的(超文本传输协议-客户端)。 我喜欢从foo返回一个布尔值,该值取决于get。这不起作用,因为http.get是asynchrouns-在http.get完成之前调用return。 我怎样才能使这个同步? 编辑 返回可观察的布尔值在这里不是一个选项。这是因为我处理get in foo的响应(此处未显示),但我也需要根据它的返回来执行f
嗨,我正在使用angular 7和rxjs async 在我的组件中,我使用ngFor与异步观察者 在我的服务中,我有一个BehaviorSubject,当用户选择一个组时,它会被释放 这是selectedItems$可观察的: 这是可行的,但现在我需要能够更改特定项以响应websocket消息。我有一个websocket连接,用于处理更新项目的消息。有没有一种方法可以使用rxjs的反应式方法来实