我在组件中有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";
}
函数内部调用。
答案 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仅在它定义的类中运行。