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

Как проехать без шаблонаUrl?

Ok. У меня есть настройка url для входа пользователя в систему. На сервере нет html. Сеанс на сервере просто уничтожается, а затем пользователь перенаправляется на адрес.

Это отлично работает с простым html, но с Angular у меня возникают проблемы. Я маршрутизировал все основные маршруты, используя $routeProvider.when('/foo', {templateUrl: '/foo.html', controller: 'Ctrl'}), и это нормально работает для обычных шаблонов. Однако, если нет шаблона, он не будет работать.

Итак, как я поддерживаю маршрут /logout так же, как описано выше, когда нет шаблона html?

4b9b3361

Ответ 1

Обходным путем является использование template вместо templateUrl. Из Angular docs:

template - {string =} - html-шаблон в качестве строки, которая должна использоваться по директивам ngView или ngInclude. это свойство имеет приоритет над templateUrl.

Это можно использовать следующим образом:

$routeProvider.when("/foo", {template: " ", controller: "Ctrl"});

Примечание. Вместо пустой строки "" вы должны использовать " ", потому что Angular использует проверку if (template) перед запуском контроллера, а пустая строка - false.

- EDIT -

Лучший способ сделать это - использовать карту resolve. См. Angular Документы:

resolve - {Object. =} - Дополнительная карта которые должны быть введены в контроллер.

Это можно использовать следующим образом:

$routeProvider.when('/foo', {resolve: {redirect: 'RedirectService'}});

Примечание. Я изменил его с "Ctrl" на "RedirectService", потому что то, что вы описываете в вопросе, на самом деле не является "контроллером" в смысле Angular. Он не настраивает область видимости. Вместо этого он больше похож на сервис, который заканчивается перенаправлением.

Ответ 2

Я пишу решение на основе уже принятого ответа, и проблема github, упомянутая в нем, комментирует.


Подход, который я использую, является параметром resolve в $routeProvider. В моем случае я пытался создать хорошее решение для logout в моем приложении, когда пользователь переходит в /logout.

Пример кода $routeProvider:

app.config(['$routeProvider', function ($routeProvider) {
    $routeProvider.
        ...
        when('/logout', {
            resolve: {
                logout: ['logoutService', function (logoutService) {
                    logoutService();
                }]
            },
        }).
        ...
}]);

В части решения вы указываете службу (factory) по имени, а затем должны называть ее. Тем не менее, это лучшее решение.

Чтобы сделать пример, я представляю свой logoutService:

angular.module('xxx').factory('logoutService', function ($location, Auth) {
    return function () {
       Auth.setUser(undefined);
       $location.path('/');
    }
});

Отлично работает!