Comments (5)
I would be nicer if we have some sort of function to do it, since I noticed this feature has been already requested #18673, the suggestion provided on this #18673 (comment) actually doesn't work as I imagine it.
As mentioned, it's important for the component to be hosted within its own embedded view, as otherwise you're killing a component that is still being attached from its parent view, breaking the parent view in the process (and there wouldn't be a way for the parent view to reinstantiate the component).
from angular.
To add to @JoostK comment - it is really about the mental model of Angular that:
- requires a host element to attach directives / components;
- assumes that a view is a fixed structure (in terms of DOM nodes and directives / components).
If we take those two very fundamental decisions into account there is no real concept of destroying "self":
- a component doesn't own its host node so it couldn't be removed from the DOM anyway;
- a component instance can be referenced by other components / directives (ex.: local references, DI, queries) and others might hold onto those instances - what should happen if / when we destroy such component?
from angular.
You can achieve it using e.g. the pattern implemented by DialogRef
, see #18673 (comment). Then the component is indeed destroyed from the parent, but the DialogRef
service can be requested by descendant components to cause their parent to close.
from angular.
So in order to destroy a component, should I destroy it from the parent component programmatically ?
because I found some resources says in order to destroy a component, it needs to be created using ViewContainerRef in order to destroy it when needed.
@JoostK , @pkozlowski-opensource
from angular.
@cl-yklilich Use top-down flow control - parents control children, not other way around
( unless you want your kids to become despots and tyrants when they grow up ;-) )
Parent component creates your component, updates inputs, and destroys / re-creates it.
So in parent component should have isOpen
boolean flag and create child like this:
@if( isChildOpen == true ) { <app-child-component (close)="isChildOpen = false" /> }
or if using older version:
<app-child-component (close)="isOpen = false" *ngIf="isChildOpen == true" /> }
then the child can emit close
signal and ask parent politely to destroy this child.:
from child:
class ChildComponent{
@Output() close = new EventEmitter() // or // close = output();
closeBtnClick(){
this.close.emit(true)
}
}
from angular.
Related Issues (20)
- Angular 17 SSR: Slow server response time when using wildcard route HOT 5
- ERROR LOADING PAGES AFTER USE router.navigate
- SSR fails when root AppComponent in index.html is self-closing HOT 1
- foo = signal(''): if string is empty, !!foo () returns false HOT 1
- Form input mask provided by the framework HOT 6
- [Feature] Introduce Type-safe Token Providing HOT 7
- docs: `inject()` is missing all overloads HOT 2
- Add distinction between model() and model.required() on type level HOT 1
- Standalone Component Exports HOT 1
- Set ViewEncapsulation per module HOT 2
- setting signal outside of angular zone error HOT 3
- View provider/provider info that's logged in the console is incorrect
- No more subclasses or `implements`/`extends` information in API doc
- Missing code blocks in usage notes. HOT 1
- toSignal does not change if new published value passes equality check and there is no way to modify that HOT 2
- ErrorNG8001 ${element} is not know element HOT 11
- FormGroup.reset() input typings are incorrect HOT 2
- ErrorHandler docs don't have standalone alternative HOT 2
- Allow one time binding input HOT 1
- Missing example code for accessibility best practices case study HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from angular.