I am using Angular 2 to build my web application which which has lot of components. I am using angular-cli to create, run and build the project.
Accidentally (or luckily) I stumbled across a bug where I realized that multiple instances of my component were being created. Even worse was when I realized that my code was referring to any one this instances randomly without any logic to trace it back.
Date.now()
. This is turn would tell me when the class was instantiated. console.log()
statements which would show me which instance was being called by the value of my variable. This is the image of my log statement. I have blackened out the sensitive parts. It can be clearly seen that some rest calls are being made with the unique id for tenant 1 while some for trial tenant. Also use of two instances is also very clear from two instance times. The old instance of previous logged in tenant is somehow still in play and my component is still able to access it.
The answer would be no. The main objective of angular services is to share data across Angular application. Practically an angular service can be shared between all the components or can be limited to some component. Hence Angular service can be a singleton as well as non-singleton in nature.
A singleton is a class that allows only a single instance of itself to be created and gives access to that created instance. It contains static variables that can accommodate unique and private instances of itself. It is used in scenarios when a user wants to restrict instantiation of a class to only one object.
Angular will create new instances for any of InjectionToken or Injectable in cases of using: lazy loaded modules. child injector modules.
What are Angular Nested Components? The Angular framework allows us to use a component within another component and when we do so then it is called Angular Nested Components. The outside component is called the parent component and the inner component is called the child component.
- Is there a way to make the component class singleton?
not that i am aware of
- Is there any way to destroy the component instance on leaving the component?
yes, there is an interface OnDestroy
export class ClockComponent implements OnDestroy {
interval;
ngOnDestroy() {
clearInterval(this.interval);
}
constructor() {
this.interval = setInterval( ()=> console.log('tick') );
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With