Angular 2 ngModel在restful调用后未更新
我有一个简单的用户组件,可以检索用户的名字和姓氏。当用户单击submit按钮时,它将进行restful调用,检索详细信息并传递回我的用户对象。然而,目前还没有发生这种情况,我也不确定出了什么问题Angular 2 ngModel在restful调用后未更新,angular,ngmodel,Angular,Ngmodel,我有一个简单的用户组件,可以检索用户的名字和姓氏。当用户单击submit按钮时,它将进行restful调用,检索详细信息并传递回我的用户对象。然而,目前还没有发生这种情况,我也不确定出了什么问题 this.model = new User().fromJSON(user)[0]; 当我在初始化期间手动启动模型时,表单将正确显示用户的数据。如果我从RESTAPI调用中检索并将值分配回表单,则表单不会被更新 this.model = new User().fromJSON(user)[0]; 我
this.model = new User().fromJSON(user)[0];
当我在初始化期间手动启动模型时,表单将正确显示用户的数据。如果我从RESTAPI调用中检索并将值分配回表单,则表单不会被更新
this.model = new User().fromJSON(user)[0];
我已经验证了数据检索是否正确,我的诊断方法还显示模型正确映射了响应数据。我尝试了zone.run,但表单也没有更新
this.model = new User().fromJSON(user)[0];
更新
我发现原因是因为响应是一个对象数组。更改以下内容已解决此问题
this.model = new User().fromJSON(user)[0];
我不确定是否有办法确保我的服务总是返回一个JSON对象而不是一个对象数组
this.model = new User().fromJSON(user)[0];
userservice.ts
this.model = new User().fromJSON(user)[0];
return this.http.post('http://ng2nodejs.azurewebsites.net/api/user', data , {
headers: authHeader
})
.map((response: Response) => { return response.json()});
我的用户组件-尽管诊断正确显示数据
this.model = new User().fromJSON(user)[0];
{{diagnostic}}
<h1>User Form</h1>
<form (ngSubmit)="f.form.valid && getUser()" #f="ngForm" >
<div class="form-group">
<label for="firstname">First Name</label>
<input type="text" id="firstname" [(ngModel)]="model.firstname" name="firstname" >
</div>
<div class="form-group">
<label for="lastname">Last Name</label>
<input type="text" id="lastname" [(ngModel)]="model.lastname" name="lastname" >
</div>
<button>Submit</button>
</form>
我的组件
this.model = new User().fromJSON(user)[0];
import { Component, NgZone } from '@angular/core';
import { User } from '../auth/user';
import { UserService } from '../auth/user.service';
@Component({
moduleId: module.id,
selector: 'app-first',
templateUrl: './first.component.html',
styleUrls: ['./first.component.css'],
})
export class FirstComponent {
constructor(private userService: UserService, private zone:NgZone) { }
model = new User();
getUser() {
this.userService
.getUser('User123')
.subscribe((user: Object) => {
this.zone.run(() => {
this.model = new User().fromJSON(user);
});
});
}
get diagnostic() { return JSON.stringify(this.model); }
}
我不知道这是否解决了你的问题,但我想在此给出一些建议
this.model = new User().fromJSON(user)[0];
如果您确实没有理由使用类,我建议您转向接口:
this.model = new User().fromJSON(user)[0];
export interface User {
username: string;
firstname: string;
lastname: string;
}
这里不需要NgZone
this.model = new User().fromJSON(user)[0];
export class FirstComponent {
constructor(private userService: UserService) { }
model: User = {};
getUser() {
this.userService
.getUser('User123')
.subscribe((user: Object) => {
this.model = user;
});
}
}
如果您可以控制API,为什么不在实际创建新用户时返回新创建的用户,这样就不需要进行单独的http调用来获取用户
this.model = new User().fromJSON(user)[0];
在上述情况下,至少似乎运行良好。属性有点不同,因为我在这里使用mockbackend。什么时候调用方法
getUser()
?您应该在init或构造函数中调用它。this.model=new User().fromJSON(User);`在控制台中返回。尝试记录'this.model'。尝试this.model=this.model.fromJSON(用户)代码>内部getUser
method@mickdevgetUser由表单(ngSubmit)=“f.form.valid&&getUser()”调用@candidJ console.log正在显示检索到的用户对象,用此模型替换新用户无效。如果此操作无效,您可以尝试在plunker中重新创建此问题?谢谢。我用你的代码做了一个快速测试,得到一个错误类型“{}”不能分配给类型“User”。模型的类型“{}”中缺少属性“firstname”:User={};plunker似乎工作正常。耶,错误是在实例化用户对象时?试试这个:model={}代码>不是真的。主要原因是返回的响应是一个数组,解决方案是this.model=new User().fromJSON(User)[0];这是我在问题中更新的。
this.model = new User().fromJSON(user)[0];