gpt4 book ai didi

web-services - Angular 2 View 不显示来自 Web 服务的数据

转载 作者:太空狗 更新时间:2023-10-29 17:54:26 25 4
gpt4 key购买 nike

我有一个提供一些用户数据的 Web 服务(这是 Java 后端),我有一个 Angular 组件:

import { Component,state,style,animate,transition, trigger, keyframes, 
OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/operator/pluck';

import { IUser } from './user.interface';

@Component({
moduleId: module.id,
selector: 'user-cmp',
templateUrl: 'user.component.html'
})
export class UserComponent {

user: Observable<IUser>;

errorMessage: string;

constructor(private _userService: ActivatedRoute){
this.user = _userService.data.pluck('user');
}

}

我正在使用解析器:

import { Resolve } from '@angular/router';
import { Observable } from 'rxjs/Observable'
import { Observer } from 'rxjs/Observer';

import { IUser } from './user.interface';
import { UserService } from './user.service';
import {Injectable} from "@angular/core";

@Injectable()
export class UsersResolver implements Resolve<IUser> {

constructor (private _userService: UserService) {}

resolve(): Observable<IUser>{
return this._userService.getUser();
}
}

解析器正在使用服务:

import {Injectable} from "@angular/core";
import { Http, Response } from "@angular/http";

import { IUser } from './user.interface';

import { Observable } from 'rxjs/Observable';

import 'rxjs/add/operator/map';
import 'rxjs/add/operator/do';
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';

@Injectable()
export class UserService {
private _userUrl = 'http://localhost:8000/rest/users';

constructor(private _http: Http){

}

getUser(): Observable<IUser>{
return this._http.get(this._userUrl)
.map((response: Response) => {
return <IUser> response.json();
})
.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');
}
}

最后是 View :

<div class="main-content" >
<div class="container-fluid">
<div class="row">
<div class="col-md-8">
<div class="card" [@carduserprofile]>
<div class="header">
<h4 class="title">Edit User Profile</h4>
</div>
<div *ngIf="user" class="content">
<form>
<div class="row">

<div class="col-md-3">
<div class="form-group">
<label>Username</label>
<input type="text" class="form-control" placeholder="Username" value="{{user.username }}">
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<label>Email address</label>
<input type="email" class="form-control" placeholder="Email" value="{{user.password}}">
</div>
</div>
</div>

<div class="row">
<div class="col-md-6">
<div class="form-group">
<label>Phone</label>
<input type="text" class="form-control" placeholder="Phone" value="{{user.telephone}}">
</div>
</div>
</div>

<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Type</label>
<input type="text" class="form-control" disabled placeholder="User type" value="{{user.type}}">
</div>
</div>
</div>
<button type="submit" class="btn btn-info btn-fill pull-right">Update Profile</button>
<div class="clearfix"></div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>

模块看起来像这样:

import { NgModule } from '@angular/core';
import { RouterModule } from '@angular/router';
import { BrowserModule } from '@angular/platform-browser';
import { MODULE_COMPONENTS, MODULE_ROUTES } from './dashboard.routes';
import { UsersResolver } from './user/user.resolver';

@NgModule({
imports: [
BrowserModule,
RouterModule.forChild(MODULE_ROUTES)
],
declarations: [ MODULE_COMPONENTS ],
providers: [ UsersResolver ]
})

export class DashboardModule{}

还有部分路线是这样的:

{ path: 'user', component: UserComponent, resolve: {user: UsersResolver} },

我没有粘贴一些无用的代码,比如动画等等。我的问题是,它使用服务中的 .do 从 webservide 打印数据,但它在 View 中没有显示任何内容。字段为空白。

我使用 *ngIf 来处理来自 WS 的空白用户数据。

我不知道为什么,也不知道如何实现一些代码来在 View 中检查它。

任何帮助都会很棒!提前致谢。

最佳答案

我看到的问题位于此处:

constructor(private _userService: ActivatedRoute){
this.user = _userService.data.pluck('user');
}

this.user 是一个可观察对象,因此您需要订阅它以获取组件内的值(使用 this.user.subscribe(...))或者在模板中使用 async 管道。

也许您可以简单地利用路线的快照:

constructor(private _userService: ActivatedRoute){
this.user = _userService.snapshot.data['user'];
}

这样,用户将是一个原始的 JS 对象,而不是一个可观察对象。所以使用下面的应该会更好:

<div *ngIf="user" class="content">

关于web-services - Angular 2 View 不显示来自 Web 服务的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44440117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com