我有两个组成部分:
app.component
site.component
我想从应用程序组件中的站点组件中捕获事件。 但是从路由器渲染的站点组件(当我点击某个链接时) 现在,我在网站组件中有:
@Component({
selector: 'app-sites-list',
templateUrl: './sites-list.component.html',
styleUrls: ['./sites-list.component.css'],
outputs: ['counterChange'],
})
export class Sites implements OnInit {
public counterChange = new EventEmitter();
并在tmplate中:
<button type="submit" (click)="check(url.value);">Go</button>
那么,我如何在app组件中捕获此事件。感谢
答案 0 :(得分:1)
不在父/子层次结构中的组件通常通过可注射服务进行通信。这样的事情(我没有测试过这段代码):
import {Subject} from "rxjs/Rx";
@Injectable()
export class MyService {
public notifierSubject:Subject = new Subject();
public notify(something:any) {
this.notifierSubject.next(something);
}
}
在组件1中,发件人:
constructor(myService:MyService) {
}
check(value) {
this.myService.notify(value);
}
在组件2中,接收者:
constructor(myService:MyService) {
myService.notifierSubject.subscribe(data => { console.log(data); });
}
在这个例子中,我从RxJS中选择了Subject
。当然,你可以自由选择你想要的任何东西。您可以订阅的所有内容都应该完成。