Angular 表达式在选中后已更改 细节

Angular 表达式在选中后已更改 细节,angular,typescript,Angular,Typescript,我试图在表单中实现ng2选择有两个问题:首先,它显示此错误,因为我使用的是当单击用户名时显示用户的表格,它重定向到另一个组件,并显示特定用户数据,如电子邮件、角色和组,当我返回并选择其他数据时,它显示此错误 表达式在选中后已更改。 另一个问题是,我使用的是相同形式的2 ng2 select,这两个都显示相同的initData 代码类型脚本 从'@angular/core'导入{Component,OnInit}; 从'@angular/Router'导入{Router,ActivatedRou

我试图在表单中实现ng2选择有两个问题:首先,它显示此错误,因为我使用的是当单击用户名时显示用户的表格,它重定向到另一个组件,并显示特定用户数据,如电子邮件、角色和组,当我返回并选择其他数据时,它显示此错误

表达式在选中后已更改。

另一个问题是,我使用的是相同形式的2 ng2 select,这两个都显示相同的initData

代码类型脚本
从'@angular/core'导入{Component,OnInit};
从'@angular/Router'导入{Router,ActivatedRoute};
从“./invite user.component”导入{InviteUserComponent};
从“./user list.component”导入{UserListComponent};
从“angular2通知”导入{SimpleNotificationsComponent};
从“../../directions/authorize user.directive”导入{AuthorizeUserDirective};
从“../../services/user.service”导入{UserService};
从“rxjs/Observable”导入{Observable};
从“../../services/auth/auth.service”导入{AuthService};
从“ng2 SELECT”导入{SELECT_指令};
@组成部分({
选择器:“用户编辑”,
templateUrl:“../../app/components/user/user edit.html”,
指令:[选择_指令]
})
导出类UserEditComponent实现OnInit{
private isAdmin:Boolean=false;
私有数据:可观察;
私有fname:string;
私人id:号码;
私有lname:string;
私人电子邮件:字符串;
私人角色:可观察;
公共角色:any=[];
公共组:任意=[];
私有initRoleData:Array[]=[];
私有initGroupData:Array[]=[];
公共选择(值:任意):无效{
console.log('所选值为:',值);
}
公共已删除(值:任意):无效{
log('删除的值为:',值);
}
公共刷新值(值:任意):无效{
this.initRoleData=值;
}
构造函数(专用路由器:路由器、,
私有用户服务:用户服务,
专用路由:激活的路由,
专用身份验证服务:身份验证服务){
this.isCurrentUserAdmin();
this.route.params.subscribe(params=>{
this.id=+params['id'];
});
}
私有isCurrentUserAdmin(){
this.userService.isCurrentUserAdmin(this.authService.getUserName())
.订阅(数据=>{
this.isAdmin=布尔值(数据);
},
错误=>{
log(“检索管理员时出错”);
console.log(错误);
this.userService.handleError(错误);
});
}
恩戈尼尼特(){
this.userService.getUser(this.id)
.订阅(数据=>{
this.fname=data.FirstName;
this.lname=data.LastName;
this.email=data.email;
});
this.userService.getUserRolesById(this.id)
.订阅(数据=>{
data.forEach(角色=>{
this.initRoleData.push(role.Name);
});
});
this.userService.getUserGroupsById(this.id)
.订阅(数据=>{
data.forEach(组=>{
this.initGroupData.push(group.Name);
});
});
this.userService.getAllRoles()
.订阅(数据=>{
data.forEach(角色=>{
this.roles.push(role.Name);
});
});
this.userService.getAllGroups()
.订阅(数据=>{
data.forEach(组=>{
this.groups.push(group.Name);
});
});
}
提交(表格:任何)
{
警报(表格);
}
}
html

编辑用户帐户
输入名字
输入姓氏
输入电子邮件地址
角色
组
取消
拯救

我通过从角形核心添加ChangeDetectionStrategy解决了这个问题。 并且还添加到组件中

import {  Component, ChangeDetectionStrategy } from '@angular/core';
@Component({
  changeDetection: ChangeDetectionStrategy.OnPush,
  selector: 'page1',
  templateUrl: 'page1.html',
})

我通过从角核添加ChangeDetectionStrategy解决了这个问题。 并且还添加到组件中

import {  Component, ChangeDetectionStrategy } from '@angular/core';
@Component({
  changeDetection: ChangeDetectionStrategy.OnPush,
  selector: 'page1',
  templateUrl: 'page1.html',
})

initialApprover
是您来源的一个术语还是来自Angular2?这是一个来自api的响应,我在ng2 select中显示了它。您可以尝试创建一个允许复制的Plunker(Plunker有一个使用“new”按钮的内置Angular2 TS模板),并尝试尽可能减少来源。这些API是什么。这些都是
http.get()
调用,还是您使用其他库调用服务器?至于api,它是本地开发的,目前只有
http.get()
调用才能从api中获取用户角色和组并在ng2 select中显示。这看起来不像是由您发布的代码引起的。通常,此错误消息是由某个事件引起的,而该事件不是由Angulars zone修补的。Angular2在事件发生后运行更改检测。在您的例子中,似乎发生了一个事件,事件处理程序用t修改了模型