Angular 2 EventEmitter问题

时间:2016-07-18 05:52:00

标签: angular

我在组件中有EventEmitter<any>类型.emit()。如果在单击按钮后在函数中调用testOutput() { this.outputEvent.emit({event: 'buttonClick', message: 'Here is some output'}); } makeAnUpdate(form) { this._service.makeDbCall(data).subscribe(result => { this.variable = result; this.outputEvent.emit({ message: 'Here is a message to pass', success: true }); }); } ,则输出有效。在这种情况下,我能够在父组件中捕获事件而没有问题。但是,这实际上只是一种测试方法。当我尝试做我真正想做的事情,即进行数据库调用,然后在成功时发出事件,事件永远不会从子组件发出或被捕获到父组件中。这里有一些代码来表明我的意思:

makeAnUpdate(form) {
    this._service.makeDbCall(data).subscribe(result => {
        this.variable = result;
        this.testOutput();
    });
}

我还尝试从下面函数的subscribe部分调用刚刚发出事件的函数,但它仍然无效:

testOutput

还有其他人有这个问题吗?同样,上面的makeAnUpdate函数只有在您调用它时才有效,但不能在 public String izbrisi(String regBroj) { List<Vozilo> lista = listaj(); Session s = HibernateUtil.getSessionFactory().getCurrentSession(); Transaction t = s.beginTransaction(); for (int i = 0; i < lista.size(); i++) { if (regBroj .equals(lista.get(i).getRegBroj())) { String izbrisiquery = "DELETE FROM Korisnik WHERE brojLk=" + regBroj + ""; Query q = s.createQuery(izbrisiquery); int a = q.executeUpdate(); t.commit(); return "adminPage"; } } t.commit(); return "error"; } 函数内部调用。

2 个答案:

答案 0 :(得分:1)

makeDbCall返回的observable的回调可能在Angulars区域外运行。请尝试

class MyComponent {
  constructor(private zone:NgZone) {}
  makeAnUpdate(form) {
    this._service.makeDbCall(data).subscribe(result => {
        this.zone.run(() => {
          this.variable = result;
          this.outputEvent.emit({ message: 'Here is a message to pass', success: true });
        });
    });
  }
}

答案 1 :(得分:-1)

我有类似的问题,EventEmitter.subscribe仅在它定义的类中运行。