Как получить доступ к глобальной переменной js в компоненте angular2

У меня есть глобальная переменная js, определенная ниже (@Url - помощник html ASP.Net MVC, он преобразуется в строковое значение):

<script>
  var rootVar = '@Url.Action("Index","Home",new { Area = ""}, null)';
  System.import('app').catch(function(err){ console.error(err); });
</script>

Как мне получить доступ к rootVar в компоненте angular2? Я использовал службу окна в angular 1.5, есть ли аналогичный способ сделать это в angular2?

В частности, я хочу использовать эту переменную rootVar, чтобы помочь сгенерировать templateUrl в этом компоненте:

import { Component, Inject} from '@angular/core';

@Component({
    selector: 'home-comp',
    templateUrl: '../Home/Root'
})

export class HomeComponent {   
    constructor( ) {  }
}

Ответ 1

Вам необходимо обновить файл, который загружает ваше приложение для экспорта функции:

import {bootstrap} from '...';
import {provide} from '...';
import {AppComponent} from '...';

export function main(rootVar) {
  bootstrap(AppComponent, [
    provide('rootVar', { useValue: rootVar })
  ]);
}

Теперь вы можете предоставить переменную из файла index.html следующим образом:

<script>
  var rootVar = '@Url.Action("Index","Home",new { Area = ""}, null)';
  System.import('app/main').then((module) => {
    module.main(rootVar);
  });
</script>

Затем вы можете ввести rootVar в компоненты и службы следующим образом:

import { Component, Inject} from '@angular/core';

@Component({
  selector: 'home-comp',
  templateUrl: '../Home/Root'
})
export class HomeComponent {   
  constructor(@Inject('rootVar') rootVar:string ) {  }
}

Ответ 2

Внутри вашего компонента вы можете ссылаться на окно для доступа к глобальным переменным следующим образом:

rootVar = window["rootVar"];

или

let rootVar = window["rootVar"];

Ответ 3

В файле компонента, определение внешнего класса компонента, объявите rootVar, и он станет доступен в конструкторе компонента:

declare var rootVar: any;

затем

@Component(...)
export class MyComponent {
  private a: any;

  constructor() {
    this.a = rootVar;
  }
}

Ответ 4

Другой подход заключается в том, чтобы экспортировать ваш var, например:

  export var API_ENDPOINT = '@Url.Action("Index","Home",new { Area = ""}, null)';

а затем импортируйте это в свой компонент

import {API_ENDPOINT }

Ответ 5

Здесь не забудьте помыть руки... Angular - это просто javascript

//Get something from global
let someStuffFromWindow= (<any>window).somethingOnWindow;

//Set something
(<any>window).somethingOnWindow="Stuff From Angular";

Это плохо по какой-то причине.. вы должны чувствовать себя плохо!

Идите и используйте эту функцию для поиска и замены window. с (<any>window).