我只是通过阅读v.4.0的教程来学习Angular。我刚刚进入该教程的Section 6(路由),我不得不理解 Exception in thread "main" java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
atorg.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: com.gargoylesoftware.htmlunit.ScriptException: TypeError:
Cannot find function all in object function Promise() { [native code] }
方法。我会对此有更多的解释感激不尽。
我知道subscribe
只被调用一次,这就是我们在这里使用ngOnInit()
的原因。但是什么事件会导致subscribe()
被触发?仅在再次请求包含该特定subscribe()
的页面时才会触发它。根据我的理解,它必须附加到某种类型的“改变”上。 ActivatedRoute.params上的事件,在用户请求同一页面时触发(包含HeroDetailComponent
)。
一旦HeroDetailComponent
改变了会发生什么?我的意思是 - 如果ActivatedRoute.params
仅执行一次,this.hero
如何分配新值会如何?我很好奇如何知道执行ngOnInit()
并将返回值分配给this.heroService.getHero(+params['id'])
?
教程here
中的完整源代码this.hero
修改 : 我刚刚找到great article,如果有人对这些概念有所了解,可能会有用。
答案 0 :(得分:1)
1)subscribe()
是rxjs的一部分,而不是角度。要完全理解它是如何工作的 - 转到rxjs文档:)
2)为了基本理解,假设你有类/对象之类的东西(真Observable
更复杂,那就是伪代码):
type CallbackFunction = () => void;
class ObservableImitation{
private subscribers: CallbackFunction[] = [];
constructor(){};
public subscribe(callback: CallbackFunction){
this.subscribers.push(callback);
}
public next(value?: any){
this.subscribers.forEach((callback: CallbackFunction) => callback(value));
}
}
基本上,当您.subscribe()
时,您的回调会添加到数组中。当其他内容在.next()
上调用Router
(如果在Observable
内部调用它)时,它会开始在所有subscribers
上循环。
为防止意外的内存泄漏和错误,最好在unsubscribe()
时,当你的Component被销毁时(如果它被销毁,例如,一些抽象NavBarComponent
总是停留在屏幕上)。< / p>
更重要的是typescript / js / es如何解析this
以进行回调。但这是另一个话题的问题。一旦你做到这一点,你就必须考虑所有这些。
.subscribe(() => {
this.doSomething();
this.doSomethingElse();
});
或
.subscribe(() => this.doSomething());
或
.subscribe(this.doSomething.bind(this));
一切正常。