Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.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 2中不保留从一个组件到另一个组件的更新值_Angular - Fatal编程技术网

全局变量在angular 2中不保留从一个组件到另一个组件的更新值

全局变量在angular 2中不保留从一个组件到另一个组件的更新值,angular,Angular,我声明了一个类,它有两个对象数组。阵列由来自后端的信息填充。我使用Observable和Http从后端获取信息。全局类是在module.ts文件的provider数组中声明的,因此它是在最高点声明的。在一个顶级组件中,我订阅了该服务,以填充ngOnInit方法中的数组。中的数据数组服务类注入到组件的构造函数中。我看到数组在这个类中填充了正确的信息。但当我在子组件中注入相同的服务类时,所有数组都是空的。为什么?有没有办法保留更新后的值?请帮忙 这是我的密码: 全局类AdminProductDisp

我声明了一个类,它有两个对象数组。阵列由来自后端的信息填充。我使用Observable和Http从后端获取信息。全局类是在module.ts文件的provider数组中声明的,因此它是在最高点声明的。在一个顶级组件中,我订阅了该服务,以填充ngOnInit方法中的数组。中的数据数组服务类注入到组件的构造函数中。我看到数组在这个类中填充了正确的信息。但当我在子组件中注入相同的服务类时,所有数组都是空的。为什么?有没有办法保留更新后的值?请帮忙

这是我的密码:

全局类AdminProductDisplayInfo(此类被添加到app.module.ts文件中的提供程序数组中

//管理产品显示信息.ts

import{ComponentGroupDisplayInfo}来自“/componentgroupdisplay”;
从“/service cat display info”导入{serviceCatadisplayinfo};
导出类AdminDisplayInfo{
公共cgc_信息列表:ComponentGroupDisplayInfo[]=[];
公共服务目录信息列表:ServiceCatDisplayInfo[]=[]
}
//从后端获取数据的服务

从“../models/admin产品显示信息”导入{AdminProudctDisplayInfo};
@可注射()
出口类产品服务{
专用后端URLhttp://localhost:8080/BAG';
构造函数(私有http:http){}
/*此方法从后端获取显示所需的数据*/
getAdminProductDisplayInfo():可观察{
让adminURL=this.backendURL.concat('/admin/getAdminProudctDisplayInfo');
让body=JSON.stringify(“”);
let headers=新的头({'Content-type':'application/json'});
let options=newrequestoptions({headers:headers});
返回此.http.post(adminURL、正文、选项)
.map(此.extractData)
.接住(这个.把手错误);
}
}
//将从中使用BagProductService和AdminProductDisplayInfo订阅和获取数据的组件

从“../services/adminBagProduct.service”导入{BagProductService};
从“../models/service cat display info”导入{serviceCatadisplayinfo};
@组成部分({
选择器:“管理员添加包产品”,
templateUrl:“./admin add bag product.html”
})
导出类AdminAddBagProduct实现OnInit{
构造函数(专用路由器:路由器、,
私人bagProdService:BagProductService,
私有adminProdDispInfo:AdminProudctDisplayInfo{}
恩戈尼尼特(){
这是.bagProdService.getAdminProductDisplayInfo().subscribe(
data=>{this.adminProdDispInfo=data;console.log(“接收到的数据:”,data)},
error=>{this.errorMessage=error,console.log(“错误消息:”,this.errorMessage)});
}
//在这里,我看到从后端填充数据,一切看起来都很好。
}
//上述组件的子组件,其中数据将用于显示,但此处所有内容均为空。

从“../services/adminBagProduct.service”导入{BagProductService};
@组成部分({
选择器:“管理员添加行李组件”,
templateUrl:“./admin add bag component.html”
})
导出类AdminAddBagComponent{
构造函数(专用路由器:路由器,专用bagProdService:BagProductService,专用adminProdDispInfo:AdminProudctDisplayInfo){
log(“在组件显示中:”,this.adminProdDispInfo.cgc\u info\u列表);
//此处,this.adminProdDispInfo.cgc_info_列表和其他数组为空。
}
}

您的理解有点倒退。
AdminProudctDisplayInfo
不包含任何数据,您只是将其声明为您正在接收的数据的模型(类似于)。要实际存储任何数据,您必须使用构造函数和函数。但是,我建议您跳过该选项,改为使用角度方式

如果您确实希望在组件之间共享数据,则可以使用
@Input
,前提是父级在模板中具有子级标记。然后您可以在父级中订阅http请求,在变量中分配数据,例如,在这里,一个名为
data
的对象数组,并将其传递给子级,如下所示:

<admin-add-bag-component [data]="data"></admin-add-bag-component>
视图:

{{d.name}
以下是对上述选项的详细了解:

如果您的孩子是使用
路由器插座显示的
,则会使用可观察的(通常)。在您的情况下,家长会发出数据,孩子会订阅数据。根据您的情况,您可能希望使用某种类型的


希望这能有所帮助,仔细看看
输入
和共享服务,这里有很多很好的例子,比我在这里解释的要近得多;)

你已经有点倒退了
AdminProudctDisplayInfo
不保存任何数据,您刚刚将其声明为您正在接收的数据的模型(类似于)。若要实际存储任何数据,必须使用构造函数和函数。但是,我强烈建议你跳过这个选项,用有角度的方式来做

如果您确实希望在组件之间共享数据,则可以使用
@Input
,前提是父级在模板中具有子级标记。然后,您将在父级订阅http请求,在变量中分配数据,例如,在这里,一个名为
data
的对象数组,并将其传递给子级,如下所示:

<admin-add-bag-component [data]="data"></admin-add-bag-component>
视图:

{{d.name}
以下是对上述选项的详细了解:

如果您的孩子是使用
路由器插座显示的
,则会使用可观察的(通常)。在您的情况下,父级将发出数据,子级将订阅数据。取决于您的cas
<div *ngFor="let d of data">{{d.name}}</div>