Angular 组件之间的角度2参考

Angular 组件之间的角度2参考,angular,Angular,我正在学习Angular 2,关于注入依赖项和提供者,但我有一个疑问。我的应用程序有两个组件:TrainingComponent和ExerciseFormComponent。这个想法是1次训练有N次练习。Training组件有一个属性Exercises,该属性包含一个练习数组,ExerciseFormComponent有一个方法:submit(),该方法在创建新练习时调用。接下来,我希望submit()使用addexercise(exercise:exercise)将新的练习添加到Trainin

我正在学习Angular 2,关于注入依赖项和提供者,但我有一个疑问。我的应用程序有两个组件:TrainingComponent和ExerciseFormComponent。这个想法是1次训练有N次练习。Training组件有一个属性Exercises,该属性包含一个练习数组,ExerciseFormComponent有一个方法:submit(),该方法在创建新练习时调用。接下来,我希望submit()使用addexercise(exercise:exercise)将新的练习添加到TrainingComponent中,但我不知道如何传递引用以调用它

ExerciseFormComponent

从'angular2/core'导入{Component};
从'angular2/common'导入{NgForm};
从“/Exercise”导入{Exercise};
从“./training.component”导入{TrainingComponent};
@组成部分({
选择器:'练习表',
templateUrl:'app/exercise form.component.html',
指令:[培训部分]
})
导出类ExerciseFormComponent{
模型=新练习(6,'你好',10,'你好',11,12);
主动=真;
提交=错误;
构造函数(私有_trainingComponent:trainingComponent){}
onSubmit(){
this.submitted=true;
//这不行!
此._trainingComponent.addExercise(此.model);
}
新练习(){
this.model=新练习(7',0',0,0);
this.active=false;
setTimeout(()=>this.active=true,0);
}
//TODO:完成后将其删除
get diagnostic(){return JSON.stringify(this.model);}
}
培训组件

从'angular2/core'导入{Component};
从“/Exercise”导入{Exercise};
从“./exercise form.component”导入{ExerciseFormComponent};
从“./exerce.service”导入{ExerciseService};
@组成部分({
选择器:“应用程序”,
模板:`
{{title}}
我的训练
射击
    {{exerce.id}{{exerce.name}
`, 指令:[ExerciseFormComponent], 提供者:[行使服务] }) 导出类培训组件{ 公开头衔=‘培训’; 公开演习:演习[]; 构造函数(私有_exerciseService:exerciseService){} getExercises(){ this.\u exerciseService.getExercises()。然后(exercises=>this.exercises=exercises); } //此方法是应该从ExerciseFormComponent中的submit()调用的对象 加法器练习(练习:练习){ 这个。练习。推(练习); } }
最好对输入和输出使用绑定,而不是在组件之间创建紧密耦合

这样,您可以生成一个事件(使用
@Output()

导出类ExerciseFormComponent{
@Output()exerciseAdded:EventEmitter=neweventemitter();
onSubmit(){
this.submitted=true;
//这不行!
this.exerciseAdded.emit(this.model);
}
这样,您可以订阅事件并在事件发生时调用方法:


为什么我只能订阅内的事件?如果我尝试订阅,例如使用
    它不起作用。因为触发事件的是
    不会触发此事件。不确定您试图完成什么。