перенаправление с использованием переменной $location с angularjs

Я следовал указаниям из этого поста:

Перенаправить с помощью AngularJS

вот мой сервис user.js:

'use strict';

staticApp.factory('user', ['$scope', '$http', '$q', '$location', function ($scope, $http, $q, $location) {
  $http.defaults.useXDomain = true;

  var host = 'http://' + window.location.hostname + ':5001';

  return {
    current: function() {
      var d = $q.defer();
      var user = $http({method: 'GET', url: host + '/api/user.json'});
      user.success(function(resp) {
        console.log('SUCCESS! logged in!');
        d.resolve(resp.user);
      });
      user.error(function(resp) {
        console.log('not logged in!');
        var login_url = 'http://path/to/login/';
        scope.$apply(function() { $location.path(login_url); });
      });
      return d.promise;
    }
  };
}]);

я использую сервер python flask для API приложения.

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

user.success(function(resp) {
  console.log('SUCCESS! logged in!');
  d.resolve(resp.user);
});

однако, когда я не аутентифицирован, и этот фрагмент кода выполняется:

user.error(function(resp) {
    console.log('not logged in!');
    var login_url = 'http://path/to/login/'
    scope.$apply(function() { $location.path(login_url); });
 });

я получаю эту ошибку:

Error: Unknown provider: $scopeProvider <- $scope <- user <- navigationDirective

person SeanPlusPlus    schedule 26.04.2013    source источник
comment
Вам нужен $ перед областью видимости. $apply(...) ? Итак, $scope.$apply...   -  person Foo L    schedule 26.04.2013
comment
если я установил вызов scope.apply, я все равно получаю сообщение об ошибке: Ошибка: Неизвестный поставщик: $scopeProvider ‹- $scope ‹- user ‹- navigationDirective   -  person SeanPlusPlus    schedule 26.04.2013
comment
если я не передам функцию $scope, я получаю эту ошибку: ReferenceError: область не определена   -  person SeanPlusPlus    schedule 26.04.2013
comment
Я хотел, чтобы вы попробовали $scope.$apply(..) . Возможно, вам не хватает $ перед областью действия.   -  person Foo L    schedule 26.04.2013
comment
я могу использовать это: window.location = login_url вместо переменной $location, и это работает ... в этом случае это нормально?   -  person SeanPlusPlus    schedule 26.04.2013
comment
да, вы можете использовать window.location, но это будет быстрый и грязный способ. Попробуйте поискать ошибку в коде. Сервер API подключен к сети? Если да, возможно, вы предоставляете jsFiddle?   -  person tschiela    schedule 26.04.2013
comment
я попробовал это с моей фабрикой, и я получаю ту же ошибку даже перед использованием. Возможно, просто недопустимо внедрять $scope в фабрику, поскольку для этого нет варианта использования. $scope следует менять в контроллере, а не на фабрике. Похоже, этот человек смог втиснуть его, передав область вызова в: stackoverflow.com/a/15298717/1376536 . Я бы рекомендовал передать функцию обратного вызова, которая будет иметь доступ к вашей области вызова.   -  person Foo L    schedule 26.04.2013
comment
сервер не в сети. я собираюсь просто пойти с window.location на данный момент. спасибо чуваки.   -  person SeanPlusPlus    schedule 27.04.2013