我有一个角度2项目设置,其中有一个名为' app组件的父组件'在ap组件中有2个子组件称为' child1组件'和' child2组件' 。
我的项目结构如下:
app.component
-- child1 component
-- child2 component
现在我的问题是:我在' child1组件中有一个按钮'并且有一个变量< variableOfChild2Component'在' child2组件'。现在当我点击' child1组件'的那个按钮时,child2组件的变量值应该改变。我怎样才能在角度2中达到这个要求?
答案 0 :(得分:1)
对于组件交互,求助于服务,我只是使用服务的快速名称,但使用对您的用例有意义的东西。
import { Subject } from 'rxjs';
@Injectable()
export class MyService {
private dataMessenger = new Subject<any>();
getData(): Subject<any> {
return this.dataMessenger;
}
setData(newData: any) {
this.dataMessenger.next(newData);
}
}
现在使用按钮
在组件1中.
.
.
export class Component1 ... {
constructor(private myService: MyService) { }
buttonClick() {
this.myService.setData("Pass anything you want here");
}
}
现在在你的组件2类
中.
.
.
export class Component2 ... {
variableOfChild2Component: any;
constructor(private myService: MyService) { }
ngOnInit() {
this.myService.getData()
.subscribe(data => {
// data argument contains whatever you pass to MyService.setData()
// function inside your Component1 class when the button is clicked
this.variableOfChild2Component = data;
});
}
}
您需要在模块中注册MyService
,例如AppModule
@NgModule({
.
.
.
providers: [ ..., MyService, ... ]
})
export class AppModule { }