2013-08-22 49 views
2

喜的角度大師,如何實現從一個服務方法變量傳遞到另一個角度

我的問題是如何將一個服務方法的返回結果傳遞給其他方法。或者把它縮短我在我的服務中有一個身份驗證方法,這個返回對象的結果是一個令牌。該令牌將被用於附加在我的標頭中,用於駐留在同一服務上的其餘http請求。

我服務的js

authenticatePlayer: function(postData) { 
    return $http({ 
     method : 'POST', 
     url  : api + 'auth/player', 
     data : postData, 
     headers : {'Content-Type' : 'application/json'} 
    }) 
    .then(function(result) { 
     return result.data.token; //this is now the token 
    }, function (result) { 
     console.log(result); 
    }); 
    } 

內的服務JS,我還有其他的$ http請求如:

 getPlayerByEmail: function(email_address) { 
     return $http({ 
      method : 'GET', 
      url  : api + 'player/' + email_address, 
      headers : {'X-token': token} 
      //token here is from the authenticatePlayer method but how to get it?? 
     }) 
     .then(function(result) { 
      return result.data; 
     }); 
    } 

兩個服務方法被稱爲在兩個控制器,我的擴展問題是如何將$ scope從一個控制器傳遞到另一個控制器,即使刷新頁面時$ scope值不會被銷燬。

希望它有道理。

+0

據我所知,當從一個頁面移動到另一個頁面時,你的AngularJS模型被破壞。如果要在頁面之間保留該標記,則必須將標記存儲在Cookie或其他本地存儲中。 –

回答

4

一種方法是創建一個service和任何你想要的控制器,它注入; 示例服務,

angular.module('myApp', []) 
    .service('shareScope', function() { 

     return { 
      get: function() { 
       return value; 
      }, 
      set: function(data) { 
       value = data; 
      } 
     }; 
    }); 

在您的控制器中;

function Ctrl($scope, shareScope) { 
    $scope.prop2 = shareScope.set('data'); 
    $scope.both = shareScope.get(); 
} 
+0

爲什麼在變量被限制在服務範圍內時使用全局窗口變量? –

+0

但是當用戶刷新頁面時,變量將被重置right/ –

+1

在JavaScript中,如果刷新頁面,變量作用域將會丟失。如果你想要刷新後變量作用域,你應該使用cookies,localStorage或者sessionStorage。 – BKM

0

儲存於一個變量:到控制器之間共享$範圍值

angular.module('foo').factory('someService', function() { 

    var token; 

    return { 
     authenticatePlayer: function(postData) { 
      return $http({ 
       method : 'POST', 
       url  : api + 'auth/player', 
       data : postData, 
       headers : {'Content-Type' : 'application/json'} 
      }) 
      .then(function(result) { 
       token = result.data.token; //this is now the token 
      }, function (result) { 
       console.log(result); 
      }); 
     }, 
     getPlayerByEmail: function(email_address) { 
      return $http({ 
       method : 'GET', 
       url  : api + 'player/' + email_address, 
       headers : {'X-token': token} 
      }) 
      .then(function(result) { 
       return result.data; 
      }); 
     } 
    }; 
}); 
+0

上面解決方案的問題是當用戶刷新頁面時變量復位。如何避免這種情況? –

+1

任何JavaScript狀態,如果刷新頁面,將永遠消失。如果狀態必須保存多頁,則必須將其存儲在某個持久位置:服務器上的cookie(請參閱angular doc中的$ cookieXxx),localStorage。 –

相關問題