Подтвердить что ты не робот

Как получить доступ к $window в Провайдере?

Я хотел бы получить доступ к $window от поставщика (mymodule.provider(...)) НО Мне нужна такая зависимость во время настройки (так что мне не нужно использовать такую ​​зависимость в $get).

В настоящее время я не получаю доступ к $window, и причиной, по которой мне нужна такая зависимость во время конфигурации, является то, что мне нужно получить доступ к $window.STATIC_URL, который является константой в окне, и я использую его для настройки состояний, шаблоны ($stateProvider).

Текущий код:

mymodule.provider('StaticUrl', function() {
    this.url = function() { return window.STATIC_URL || 'static'; };
    this.$get = this.url;
});

Это потому, что мне нужно такое значение как в конфигурации, так и во время выполнения (я использую его больше, чем просто настройку состояний, поэтому, когда мне нужен такой url в контроллере, я импортирую его как зависимость).

//config
mymodule.config(['StaticUrlProvider', '$stateProvider', function(sup, $sp){
    //...
    $sp.state('main', {
        templateUrl: sup.url() + 'path/to/template.html'
    });
    //...
}]);
//run-time (in this case: a controller)
mymodule.controller('MyController', ['$scope', 'StaticUrl', function($s, su) {
    var buildingType = /*a complex expression here*/;
    $s.buildingPicture = $su + 'path/to/building/pics/' + buildingType + '.png';
}]);

Учитывая существующий набор данных, у меня есть фотография для каждой записи, находящаяся под STATIC_URL, которая должна быть предоставлена. Таким образом, это означает, что я использую такую ​​константу в обе стадии.

Как я могу сделать это в более Angular -way (i.e, не полагаясь на глобальные переменные)? Есть ли способ, с помощью которого я могу получить доступ $window к провайдеру без повышения moduleerr?

4b9b3361

Ответ 1

Вставить $windowProvider и вызвать $windowProvider.$get()