Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 未从模型调用Setter/getter_Angular_Angular5 - Fatal编程技术网

Angular 未从模型调用Setter/getter

Angular 未从模型调用Setter/getter,angular,angular5,Angular,Angular5,我有一个问题,双向绑定不能正常工作,我假设getter和setter方法就是问题所在 正如您在示例中看到的,am使用数据属性member.selectedConfig两次。在这方面,当加载组件时,它们的值都应该是“HelloWorld”,但它们都不是 当我开始手动更改文本框的值时,其他绑定的显示文本也将更改,但不调用set函数 始终正确显示member.name的值 移除类BasicSystemMember中的getter和setter函数时。装订也可以完美地工作。但我需要一个setter函数

我有一个问题,双向绑定不能正常工作,我假设getter和setter方法就是问题所在

正如您在示例中看到的,am使用数据属性
member.selectedConfig
两次。在这方面,当加载组件时,它们的值都应该是
“HelloWorld”
,但它们都不是

当我开始手动更改文本框的值时,其他绑定的显示文本也将更改,但不调用set函数

始终正确显示member.name的值

移除类
BasicSystemMember
中的getter和setter函数时。装订也可以完美地工作。但我需要一个setter函数


{{member.name}
{{member.selectedConfig}

导出类BasicSystemMember实现SystemMember{
名称:字符串;
private\u selectedConfig:string;
构造函数(){
这是。\ u selectedConfig=“HelloWorld”
}
设置selectedConfig(新名称){
这是。\ u selectedConfig=newName
};
获取selectedConfig(){
返回此项。\u selectedConfig
};
}
导出类SystemMembersComponent实现OnInit{
activeSystemMembersList:系统成员[];
恩戈尼尼特(){
此.activeSystemMemberService.getActiveSystemMembers().subscribe(
activeSystemMembersList=>this.activeSystemMembersList=activeSystemMembersList)
}
}
导出类ActiveSystemMemberService{
名单:系统成员[];
构造函数(){
this.list=[]
}
getActiveSystemMembers():可观察{
返回(此.list)
} 
}

此问题最常见于创建项目时,在您的情况下,您的
成员
。如果您是作为Http请求的一部分创建项目,则如下所示:

getMembers(): Observable<BasicSystemMember[]> {
    return this.http.get<BasicSystemMember[]>(this.Url);
Object.assign(new BasicSystemMember(), member);
像这样的东西会有用的。。。但可能会更有效地编码(现在很晚了,哈哈)

getMembers():可观察{
返回this.http.get(this.Url).pipe(
地图(数据=>{
const newList:BasicSystemMember[]=[];
data.forEach(项=>
push(Object.assign(newBasicSystemMember(),item));
返回newList;
})
);
}
注意:我没有对此进行测试或语法检查


此代码映射Http响应的结果。它创建一个适当类型的数组。然后foreach使用Object.assign遍历数组的每个元素,以创建相应类的实例并将项的数据复制到其中。然后它将其推送到数组上。

什么是
activeSystemMembersList
以及如何构建它?更改了最小示例
activeSystemMembersList
由一个observable填充。我认为这也与我的示例相关,因为我也在使用来自我的服务的observable。这怎么能解决?我一直在考虑。我可以向您展示我用于单个项目的代码。然后,您可以确定映射到创建整个数组的最佳语法…您帮了我很多。实际上,我不是通过HTTP创建对象,而是通过一个名为dragula的插件。但根本原因是一样的。当我拖动一个包含所有getter和setter的元素时,它的副本将不会包含getter和setter。非常感谢你!就我个人而言,我发现使用简单的基于属性的接口比使用“业务对象”容易得多。然后根据需要向组件添加getter/setter,这样我就不必编写代码来处理这种“不匹配”。
getMembers(): Observable<BasicSystemMember[]> {
    return this.http.get<BasicSystemMember[]>(this.Url).pipe(
        map(data => {
           const newList: BasicSystemMember[] = [];
           data.forEach(item => 
                newList.push(Object.assign(new BasicSystemMember(), item)));
           return newList;
        })
     );
}