• 上下文传播

    上下文传播

    上下文传播允许将数据附加到 zone。 然后,当数据在异步调用中传播时,数据与 zone 一起传输。

    1. let rootZone = Zone.current;
    2. // Fork rootZone和attach属性
    3. let zoneA = rootZone.fork({name: 'zoneA', properties: {a: 1, b:1}});
    4. // Fork zoneA和attach属性,其中一些覆盖zoneA。
    5. let zoneB = zoneA.fork({name: 'zoneA'[d], properties: {a: 2}});
    6. // 查询zoneA返回预期值
    7. expect(zoneA.get('a')).toEqual(1);
    8. expect(zoneA.get('b')).toEqual(1);
    9. // 查询zoneB返回zoneB定义'a'为2的预期值。
    10. expect(zoneB.get('a')).toEqual(2);
    11. // 查询zoneB的'b'返回zoneA的'b',因为zoneB没有'b'的值。
    12. expect(zoneB.get('b')).toEqual(1);

    关键点:

    • 附加到该区域的数据shallow-immutable。 (一旦 zone 被 fork,它的属性不能被改变。)
    • 子 zone 继承父 zone 属性。(在子 zone 中运行的代码应该与在父 zone 中运行的代码相同,前提是子 zone 没有显式覆盖代码所依赖的值。)
    • 因为 zone 流通过异步操作,所以相应的属性与 zone 流允许以某种形式进行通信。