2013-12-01 2 views
0

Я пишу службу в AngularJS, и я хочу, чтобы эта служба выполняла перенаправление на странице, которую я выбираю. Я не имею $ рамки в этом так я использую:

$window.location.assign('path'); 

как documented on w3c.

Что я спрашиваю, если это безопасное использование или я должен использовать что-то другое.

пс: те, не работает:

$location.assign(); //assign is not a function 
// 
$location.path(); 
$scope.$apply(); //I don't have a $scope 

Большое спасибо.

EDIT: добавил код (в socketio.listen('auth.loggedInSuccessfully', function(data) { у меня проблемы я описал)

angular.module('frontendApp') 
    .factory('login', function ($window, socketio, $rootScope) { 
     // Service logic 
     // ... 
     var loginType = null; 

     // prepare socketio events 
     socketio.listen(); 

     socketio.listen('auth.loggedInSuccessfully', function(data) { 
      console.log("Login verified by server!.. Redirecting..."); 
      console.log("Login data received: " + JSON.stringify(data)); 
      $rootScope.user = data.user; 
      $rootScope.$apply(); 
      loginType = "facebook"; 
      //console.log("$rootScope.user: " + JSON.stringify($rootScope.user.name)); 
      //$location.path(destUrl); // THIS doesn't work. 
      $window.location.assign(data.destUrl); // this does! 
     }); 
     socketio.listen('auth.loginFailed', function() { 
      console.log("Login failed!"); 
      $rootScope.user = {} 
     }); 
     socketio.listen('auth.logout', function() { 
      console.log("Logged out!"); 
      $rootScope.user = {}; 
     }) 

     // Public API here 
     var api = { 
      fb: { 
       validateToken: function (access_token, destUrl) { 
        socketio.emit('fb.login', { 
         access_token: access_token, 
         destUrl: destUrl 
        }); 
        console.log("Waiting server response..."); 
       },[...] 
     }; 
     return api; 
    }); 

ответ

1

Спасибо за размещение кода.

Я верю, что в вашем примере изменение местоположения происходит в обработчике событий за пределами AngularJS. Обычно это требует, чтобы изменения состояния были обернуты в $ scope. $ Apply. Возможно, что-то вроде этого:

socketio.listen('auth.loggedInSuccessfully', function(data) { 
    console.log("Login verified by server!.. Redirecting..."); 
    console.log("Login data received: " + JSON.stringify(data)); 
    loginType = "facebook"; 
    $rootScope.$apply(function() { 
     $rootScope.user = data.user; 
     $location.path(destUrl); 
    }); 
}); 
+0

Это работало безупречно. Большое спасибо, я не знал об этом. –

Смежные вопросы