Javascript 使用输入/输出事件触发Angular 2中父组件中的方法

Javascript 使用输入/输出事件触发Angular 2中父组件中的方法,javascript,angularjs,events,angular,Javascript,Angularjs,Events,Angular,子服务如何通知父组件更改?我曾经在angular 1中通过查看子服务中的变量来实现这一点。不幸的是,这已经不可能了 我尝试将服务注入到组件中,但失败了,可能是因为循环依赖关系。根据我在当前文档中找到的内容,我提出了以下代码: AppComponent | SomeComponent | SomeService AppComponent @Component({ selector: '[app-component]', templateUrl: 'partials/app.h

子服务如何通知父组件更改?我曾经在angular 1中通过查看子服务中的变量来实现这一点。不幸的是,这已经不可能了

我尝试将服务注入到组件中,但失败了,可能是因为循环依赖关系。根据我在当前文档中找到的内容,我提出了以下代码:

AppComponent
 |
SomeComponent
 |
SomeService
AppComponent

@Component({
    selector: '[app-component]',
    templateUrl: 'partials/app.html',
    directives: [
        SomeComponent
    ],
    providers: [
        SomeService
    ]
})
export class AppComponent {
    constructor() { }
}

bootstrap(AppComponent);
import {Component, Input} from 'angular2/core'
import {SomeService} from '../services/some.service'

@Component({
    selector: 'foo',
    templateUrl: 'partials/foo.html'
})
export class SomeComponent {
    constructor() {}
    @Input set someEvent(value) {
        console.log(value);
    }
}
SomeComponent

@Component({
    selector: '[app-component]',
    templateUrl: 'partials/app.html',
    directives: [
        SomeComponent
    ],
    providers: [
        SomeService
    ]
})
export class AppComponent {
    constructor() { }
}

bootstrap(AppComponent);
import {Component, Input} from 'angular2/core'
import {SomeService} from '../services/some.service'

@Component({
    selector: 'foo',
    templateUrl: 'partials/foo.html'
})
export class SomeComponent {
    constructor() {}
    @Input set someEvent(value) {
        console.log(value);
    }
}
SomeService

import {EventEmitter, Output} from 'angular2/core'

export class CoreService {
    constructor() {
        this.someEvent = new EventEmitter();
    }
    @Output() someEvent: EventEmitter<any>;
    public foo() {
        this.someEvent.emit(true); // Or next(true)?
    }
}
import{EventEmitter,Output}来自'angular2/core'
出口级核心服务{
构造函数(){
this.someEvent=neweventemitter();
}
@Output()someEvent:EventEmitter;
公共食物({
this.someEvent.emit(true);//还是next(true)?
}
}

@Output
只能用于组件,不能用于服务中。在此级别,您可以使用
(…)
语法注册此事件

从angular.io文档()中:

声明事件绑定的输出属性

当输出属性发出事件时,将调用模板中附加到该事件的事件处理程序

对于服务,您需要明确订阅此事件,如下所述:

import {Component, Input} from 'angular2/core'
import {SomeService} from '../services/some.service'

@Component({
  selector: 'foo',
  templateUrl: 'partials/foo.html'
})
export class SomeComponent {
  constructor(service:CoreService) {
    service.someEvent.subscribe((val) => {
      console.log(value);
    });
  }
}