Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(elements): fire custom element output events during component initialization (take 2) #37570

Closed

Commits on Jun 13, 2020

  1. fix(elements): fire custom element output events during component ini…

    …tialization
    
    Previously, event listeners for component output events attached on an
    Angular custom element before inserting it into the DOM (i.e. before
    instantiating the underlying component) didn't fire for events emitted
    during initialization lifecycle hooks, such as `ngAfterContentInit`,
    `ngAfterViewInit`, `ngOnChanges` (initial call) and `ngOnInit`.
    The reason was that `NgElementImpl` [subscribed to events][1] _after_
    calling [ngElementStrategy#connect()][2], which is where the
    [initial change detection][3] takes place (running the initialization
    lifecycle hooks).
    
    This commit fixes this by:
    1. Ensuring `ComponentNgElementStrategy#events` is defined and available
       for subscribing to, even before instantiating the component.
    2. Changing `NgElementImpl` to subscribe to `NgElementStrategy#events`
       (if available) before calling `NgElementStrategy#connect()` (which
       initializes the component instance) if available.
    3. Falling back to the old behavior (subscribing to `events` after
       calling `connect()` for strategies that do not initialize `events`
       before their `connect()` is run).
    
    NOTE:
    By falling back to the old behavior when `NgElementStrategy#events` is
    not initialized before calling `NgElementStrategy#connect()`, we avoid
    breaking existing custom `NgElementStrategy` implementations (with
    @remackgeek's [ElementZoneStrategy][4] being a commonly used example).
    
    Jira issue: [FW-2010](https://angular-team.atlassian.net/browse/FW-2010)
    
    [1]: https://github.com/angular/angular/blob/c0143cb2abdd172de1b95fd1d2c4cfc738640e28/packages/elements/src/create-custom-element.ts#L167-L170
    [2]: https://github.com/angular/angular/blob/c0143cb2abdd172de1b95fd1d2c4cfc738640e28/packages/elements/src/create-custom-element.ts#L164
    [3]: https://github.com/angular/angular/blob/c0143cb2abdd172de1b95fd1d2c4cfc738640e28/packages/elements/src/component-factory-strategy.ts#L158
    [4]: https://github.com/remackgeek/elements-zone-strategy/blob/f1b6699495a8c0909dbbfbdca12770ecca843e15/projects/elements-zone-strategy/src/lib/element-zone-strategy.ts
    
    Fixes angular#36141
    gkalpak committed Jun 13, 2020
    Configuration menu
    Copy the full SHA
    0590373 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    f5f8144 View commit details
    Browse the repository at this point in the history