嗨,我有一个对象,它正在使用一个组件中的可观察到的东西从api更新,我想捕获同一对象对另一个组件的更改。这两个组件都是两个选项卡。最初是根据路由更新数据。以下是正在更新的数据:
@Component({
template : `<div><input type='text' [(ngModel)]='data.name' /></div>`
})
export class ComponentOne{
data : any;
constructor(private dataService : DataService,
private route : ActivatedRoute,private events : Events){
this.data = this.route.snapshot.data['data'];
}
updateData(){
this.dataService.update(this.data).subscribe(result => {
this.data = result;
this.events.publish('data',this.data);
})
}
}
我在这里捕获数据:
@Component({
template : `<div>{{data.name}}</div>`
})
export class ComponentTwo{
data : any;
constructor(private dataService : DataService,
private route : ActivatedRoute,private events : Events){
this.data = this.route.snapshot.data['data'];
}
ngViewDidEnter(){
//why updated data not coming from server
this.data = this.route.snapshot.data['data'];
this.events.subscribe('data',(data) => {
this.data = data;
})
}
}
在componentTwo
中,数据最初是从路由获取的。考虑到上述情况,我有两个问题:
subscribe
事件,这将是一个很好的做法。请提出任何替代方法?ComponentTwo
中的This.Route.Snapshot.data['data']
获取更新的数据?由于它们在任何方面都不相关,因此您应该使用共享服务。
首先创建一个服务,并向其添加主题
export class SharingService {
data: Subject<any> = new Subject();
}
在第一个组件中,您将更新数据并将其传递给主题
updateData(){
this.dataService.update(this.data).subscribe(result => {
this.data = result;
this.sharingService.data.next(data);
this.events.publish('data',this.data);
})
}
在第二个服务中,您现在可以订阅更改事件:
constructor(
private dataService : DataService,
private route : ActivatedRoute,
private events : Events,
private sharingService: SharingService
){
sharingService.subscribe(data => this.data = data);
}
并不是说必须实例化两个选项卡才能使其工作。如果不是,则必须使用BehaviorSubject
:
data: BehaviorSubject<any> = new BehaviorSubject(undefined);
问题内容: 我有两个组成部分。我想从第二个组件中调用第一个组件的方法。我该怎么做? 这是我的代码。 第一部分 第二部分 问题答案: 你可以做这样的事情 使用静态
问题内容: 许多模板语言都有“ slots”或“ yield”语句,它们允许进行某种形式的控制反转,以将一个模板包装在另一个模板中。 Angular具有“ transclude”选项。 Rails有收益声明。如果React.js拥有yield语句,它将看起来像这样: 所需的输出: React,React.js没有。如何定义包装器组件以实现相同的输出? 问题答案: 尝试: 有关更多信息,请参见文档中
许多模板语言都有“slots”或“yield”语句,它们允许进行某种形式的控制反转,将一个模板包装在另一个模板中。 唉,react.js没有。我如何定义包装器组件以实现相同的输出?
我有一个产品组件,我希望将其图片传递给另一个组件,我的图片从Rails后端上传,并映射产品详细信息。我想实现的是,当您单击按钮时,您的产品图片将显示在设计页面中进行自定义设计。 设计页面当您单击设计我按钮时,根据产品,该产品的图片应该出现在设计页面中 陈列
问题内容: 我有一个包含一个按钮的标题组件,并且我希望该按钮在单击时显示另一个组件(模式页面)。 我可以做这样的事情: 这是我的标头组件: 这是我的模态页面组件,单击其他组件上的按钮时应显示该组件页面: 用于模态的库:https : //github.com/marcio/react-skylight 问题答案: 更像这样: 确保在子组件上公开一个方法: 基本上,这是在将SkyLight的方法包装
问题内容: 我有两个对象数组。我想基于PermissionObj过滤数据。 这是即将形成的数据库。这是permissionObj中的子数组的数组。 这是静态数据。我想比较基于PermissionObj的数据。 我正在尝试基于 对象 的 PermissionObj数组 过滤 对象 的 数据数组 。这是我尝试的代码。 如果PermissionObj值将与data值匹配。然后显示数据。 我接受的输出将是