Привет! Я пытаюсь открыть определенные разделы (например, call.html, чтобы не выполнять аутентификацию) для моего одностраничного приложения в angular.js, используя сервис входа в систему.

Я хотел бы знать, как я могу получить путь (http://www.example.com/ app / # / call / 1234), чтобы я мог сравнить его и перенаправить на страницу входа в систему, если страница не называется call.html?

В моем app.js есть следующий код, который, кажется, работает, но не работает в Chrome, и я получаю следующую ошибку:

TypeError: $location.path(...).contains is not a function

Мой app.js .

app.run(['$rootScope', '$location', '$cookieStore', '$http',
    function ($rootScope, $location, $cookieStore, $http)
    {
        $rootScope.globals = $cookieStore.get('globals') || {};
        if ($rootScope.globals.currentUser)
        {
            $http.defaults.headers.common['Authorization'] = 'Basic' + $rootScope.globals.currentUser.authdata; // jshint ignore:line
        }
        $rootScope.$on('$locationChangeStart', function (event, next, current)
        {
            // redirect to login page if not logged in
            if($location.path().contains('call'))
            {
                return;
            }

            else
            {
                if ($location.path() !== '/login'  && !$rootScope.globals.currentUser && $location.path() !=='/')
                {
                    $location.path('/login');
                }
            }
        });
    }
]);

Любая помощь в решении этой проблемы будет принята с благодарностью.

3
snowflakes74 22 Дек 2015 в 06:57

3 ответа

Лучший ответ

Содержит метод jquery не angularjs. Итак, используя эту строку кода:

if($location.path().contains('call')){

Очевидно выдает ошибку "содержит не функция".

Вы можете использовать indexOf:

if($location.path().indexOf('call') > -1){
8
Bhojendra Rauniyar 22 Дек 2015 в 04:04

$locationProvider по умолчанию использует хэш-банг (как видно из вашего пути /app/#/call/1234), поэтому, если вы не установите html5Mode в true, вы получите пустую строку, если попытаетесь чтобы получить путь URL.

Попробуйте установить $locationProvider.html5Mode(true), и вы сможете получить путь к URL.

1
Jia Jian Goi 22 Дек 2015 в 04:01

Ты можешь сделать :-

var url = $location.url();
if(url.indexOf('call') > -1){
   console.log("Call present");
}
0
Gaurav joshi 22 Дек 2015 в 04:10