2016-06-29 9 views
0

Ich versuche, den letzten Aufruf in unten Code funktioniert, aber ein Problem mit $ scope.token Variable haben. Es wird an den Dienst mit nicht definiertem Wert übergeben. Ich habe versucht, eine Variable nach der anderen in die getAccessToken-Funktion zu übergeben, aber es funktioniert auch nicht. Interessanterweise werden die Variablen $ scope.client und $ scope.tenant ordnungsgemäß übergeben.

Ich fand eine Menge Ressourcen in Bezug auf .service oder .factory, was mich auch diesen Aufruf in einen anderen Controller trennen würde, aber das sind zu fortgeschrittene Themen für einen Anfänger.

Ich bin neu in der Programmierung überhaupt, also mache ich wahrscheinlich einen dummen Fehler.

var defaultListApp = angular.module('defaultListApp', ['build', 'build_editors']); 
defaultListApp.controller('authorizationCtrl', ['$scope', '$location', 'Restangular', '$http', function($scope, $location, Restangular, $http){ 

    Restangular.setBaseUrl('https://api.xxx.io/xxx/xxx/'); 
    Restangular.one('projects/' + Build.currentProjectId + '/clients').getList().then(function(items){ 
    $scope.items = Restangular.stripRestangular(items); 
    console.log("ITEMS: " + $scope.items); 
},function(error){ 
    //handle error 
}); 

$scope.selectClient = function(client) { 
$scope.client = client.id; 
Restangular.setBaseUrl('https://api.xxx.io/xxx/xxx/'); 
Restangular.one('projects/' + Build.currentProjectId + '/clients/' + $scope.client + '/credentials').get().then(
    function(response){ 
    $scope.credentials = Restangular.stripRestangular(response); 
    $scope.clientId = $scope.credentials[0].clientId; 
    $scope.clientSecret = $scope.credentials[0].clientSecret; 
    $scope.getAccessToken($scope.client, $scope.clientSecret); 
    $scope.tenant = Build.currentProjectId; 
    $scope.getAppRepresentation($scope.client, $scope.tenant, $scope.token); 
}); 
}; 

$scope.getAccessToken = function(oauthPayload){ 
$http({ 
       method: 'POST', 
       url: 'https://api.xxx.io/xxx/oauth2/token', 
       headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, 
       data: 'grant_type=client_credentials' + 
       '&scope=xxx.view xxx.manage' + 
       '&client_id=' + $scope.clientId + 
       '&client_secret=' + $scope.clientSecret 
      }).then(function(response) { 
       $scope.token = response.data.access_token; 
       $scope.getAppRepresentation($scope.client, $scope.tenant, $scope.token); 
       var path = "/calls.html"; 
       window.location.href = path; 


      }) 
      }; 

$scope.getAppRepresentation = function(getApp){ 
$http({ 
       method: 'GET', 
       url: 'https://api.xxx.io/xxx/documents/' + $scope.tenant + '/' + $scope.client, 
       headers: {'Authorization': 'Bearer ' + $scope.token } 
        }).then(function(response) { 
       $scope.appData = response.data; 
       console.log($scope.appData); 
      }) 
      } 

Antwort

1

Sie nicht für $scope.getAccessToken() warten abgeschlossen ist, bevor das Token in $scope.getAppRepresentation()

es auf diese Weise zu verwenden versuchen, tun können: Sequenz

$scope.getAccessToken = function(oauthPayload){ 
    // return promise 
    return $http({.......}) 
} 

dann ändern aufzurufen:

Zu

Hinweis: Es gibt keinen Grund, jede Funktion als Teil von $scope zu definieren, wenn Sie sie nur intern in der Steuerung verwenden und nicht in der Ansicht benötigen. In der Tat ist ein bisschen verwirrend

+0

Danke! Das hat mir sehr geholfen, ich war in der Lage, PoC zu präsentieren und arbeite jetzt hart daran, diesen Code (zumindest ein bisschen) professionell zu machen: spaltet verschiedene Funktionen auf, um Controller und Dateien zu trennen und fügt einige CSS in HTML ein :) – KamilaM

Verwandte Themen