I really struggle with creating global variables in my Angular 2 application.
I already googled and read many posts on StackOverflow on this for the last 3 hours, however it seems like I just can't make it work. I really hope you can help me and I apologize for asking this question.
So I have my file called globals.ts, which looks like this:
import { Injectable } from "@angular/core";
@Injectable()
export class Globals {
var role = 'test';
}
And I want to use the variable role in my HTML view of my component like this:
{{ role }}
I already added the globals.ts file to my app.module.ts in the following way:
providers: [
Globals
],
No matter what I did on this file, it just didn't work. What I don't want to do is to have to import the globals.ts file in every component manually, which is why I want to use the providers feature.
I really hope you can help me and sorry again.
Best regards,
A E
This question is related to
angular
typescript
You can use the Window object and access it everwhere. example window.defaultTitle = "my title"; then you can access window.defaultTitle without importing anything.
Not really recommended but none of the other answers are really global variables. For a truly global variable you could do this.
<body>
<app-root></app-root>
<script>
myTest = 1;
</script>
</body>
..near the top right after imports:
declare const myTest: any;
...later:
console.warn(myTest); // outputs '1'
I use environment for that. It works automatically and you don't have to create new injectable service and most usefull for me, don't need to import via constructor.
1) Create environment variable in your environment.ts
export const environment = {
...
// runtime variables
isContentLoading: false,
isDeployNeeded: false
}
2) Import environment.ts in *.ts file and create public variable (i.e. "env") to be able to use in html template
import { environment } from 'environments/environment';
@Component(...)
export class TestComponent {
...
env = environment;
}
3) Use it in template...
<app-spinner *ngIf='env.isContentLoading'></app-spinner>
in *.ts ...
env.isContentLoading = false
(or just environment.isContentLoading in case you don't need it for template)
You can create your own set of globals within environment.ts like so:
export const globals = {
isContentLoading: false,
isDeployNeeded: false
}
and import directly these variables (y)
Source: Stackoverflow.com