angular/devtools/src/app/app.component.ts
AleksanderBodurri 5be80d33a3 fix(devtools): DOM traversal bug (#62719)
Previously, Angular devtools would mistakenly traverse the same DOM elements multiple times while doing traversal for the component tree explorer. This error case would occur when more than 1 Angular application root component was present on the same page and in distinct DOM branches.

Some example cases that did work previously:

```html
<app-root>
...
</app-root>
```

```html
<app-root>
...
<app-root-2></app-root-2>
...
</app-root>
```

An example of where it would enter the irregular behaviour

```html
<app-root>
...
</app-root>
<app-root-2>
...
</app-root-2>
```

Now, we properly ignore duplicate DOM paths when looking for application and non-application root component to begin the Angular DevTools component discovery logic.

PR Close #62719
2025-08-18 15:43:09 +00:00

46 lines
1.1 KiB
TypeScript

/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.dev/license
*/
import {Component, inject} from '@angular/core';
import {Router, RouterOutlet} from '@angular/router';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss'],
imports: [RouterOutlet],
})
export class AppComponent {
readonly router = inject(Router);
}
@Component({
selector: 'empty-component',
template: ``,
})
export class EmptyComponent {
// This component is just for demonstration purposes.
// used to test Angular DevTools traversal logic when multiple applications are present.
}
@Component({
selector: 'other-app',
template: `
@defer {
<empty-component/>
}
@placeholder (minimum 2s) {
<b>Stuff will be loaded here</b>
}
`,
imports: [EmptyComponent],
})
export class OtherAppComponent {
// This component is just for demonstration purposes.
// used to test Angular DevTools traversal logic when multiple applications are present.
}