有人可以解释Angular订阅方法

时间:2017-05-04 19:12:32

标签: angular rxjs observable

我只是通过阅读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,如果有人对这些概念有所了解,可能会有用。

1 个答案:

答案 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));

一切正常。