[英]angular2 render component before oninit
我有以下代码片段
import { Component, OnInit } from "@angular/core";
import { AuthenticationService } from "../shared/services/authentication.service";
import { User } from "./user";
import { UserService } from "./user.service";
@Component({
templateUrl:'./user.component.html'
})
export class UserComponent implements OnInit{
user: User;
constructor(
private _userService: UserService,
private _authService:AuthenticationService){
}
ngOnInit(){
let user = this._userService.getUser();
if(!user){
this._authService.getLoggedUser().subscribe(
user => {
this.user = user;
this._userService.setLoggedUser(user);
}
);
this._userService._loggedUser$.subscribe(
user => {
this.user = user;
}
)
}else{
this.user = user;
}
}
}
这与使用else
块进行第一个路由初始化(/ user / profile)的效果很好。但是当用户刷新浏览器窗口时,我再次向服务器发出了一个请求,并让用户返回并渲染了我的html组件( if(!user)
块)。这是HTML视图
<form>
<fieldset>
<legend>Profile</legend>
<div class="form-group">
<label>Name</label>
<input name="name" type="text" class="form-control" [(ngModel)]="user.name">
</div>
<div class="form-group">
<label>Mobile</label>
<input name="mobile" type="text" class="form-control" [(ngModel)]="user.mobileNumber">
</div>
<div class="form-group">
<label>Password</label>
<input name="password" type="password" class="form-control">
</div>
<div class="form-group">
<label>Email</label>
<input name="email" type="text" class="form-control" [(ngModel)]="user.email" disabled>
</div>
</fieldset>
</form>
我有AppComponent,它将在onInit
内执行相同的onInit
(如果不存在,则通过http调用获取用户)。问题是当我在完成userComponent的init方法之前首先刷新页面上的UserComponent时将导航到AppComponent的init方法并在该user.component.html
崩溃之后,没有用户数据说Cannot read property 'name' of undefined
并且它将再次重定向到UserComponent的onInit,但此时用户html已经呈现并消失。
我该如何解决这种情况?有没有最好的方法来处理这种情况?
提前致谢..
您可以将<form>
放在<div *ngIf="user">..</div>
并且仅当用户内部具有一些值时,此组件才会加载。 因此您不会收到该错误。
<div *ngIf="user">
<form> <fieldset>
<legend>Profile</legend>
<div class="form-group">
<label>Name</label>
<input name="name" type="text" class="form-control" [(ngModel)]="user.name">
</div>
.............
.............
</form>
</div>
还有另一种方法可以在路由中使用resolve,因此只有完成解析后,才会启动user.component。
export const AppRoutes: Routes = [
...
{
path: 'contact/:id',
component: ContactsDetailComponent,
resolve: {
contact: 'contact'
}
}
];
从此处阅读有关解决问题的信息http://blog.thoughtram.io/angular/2016/10/10/resolving-route-data-in-angular-2.html
那这个呢? 用户进入后显示表单。 <fieldset *ngIf="user">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.