2017-02-13 1 views
0

Ich habe einen Winkel-Controller, der eine Reihe von Funktionen hat, die die Daten zwischen ihnen teilen. Das Problem ist, dass die Daten, die ich von Funktion 1 zurückgebe, in Funktion 2 verwendet werden und dann die in Funktion 2 zurückgegebenen Daten in Funktion 3 verwendet werden. Mein Problem ist die Funktion 2 und Funktion 3 führt zuerst aus und sagt, dass die Daten nicht gefunden werden Gibt es einen Weg, wo ich die Funktion 1 für die Ausführung planen kann.Wie man die angular JS-Funktion ausführen lässt, sobald die Seite geladen wird

Im Anschluss an mein Code als Referenz:

$scope.Read = function() { 
    var get = ServiceName.Read(); 
    getConfig.then(function (d) { 
     $scope.RID = d.data; 
     alert($scope.RID); 
    }, function (error) { 
     $log.error('Oops! Something went wrong while fetching the application key data.' + error) 
    }) 

} 
$scope.Read(); 

Funktion 2, wo ich die Daten verwenden möchten:

$scope.getApp = function() { 
     var sub ={ 
       "RID": $scope.RID 
     } 
     var App = ServiceName.getApp(sub); 

     App.then(function (d) { 
      $scope.LID = d.data.BUser; 
     }, function (error) { 
      $log.error('Opps! Something went wrong in getting appplication defaults'); 
     }); 
    } 
    $scope.getApp(); 

Jede mögliche Hilfe würde geschätzt!

Vielen Dank!

Mit besten Grüßen,

Sandeep

Antwort

1

Wenn die Die ersten beiden sind Aufrufe an einen Dienst, der ein Versprechen zurückgibt, was so aussieht. Könnten Sie die Funktion nicht in der .Then() aufrufen?

Beispiel:

$scope.functionOne(){ 
    CallToService().then(function(data){ 
    //Success call Function 2 
    $scope.functionTwo(data); 
},function Error(){ 
    //Error/ 
} 
}; 


$scope.functionTwo(){ 
    CallToService2().then(function Success(data){ 
    //Call function 3 
    $scope.function3(data); 
    }, 
    function Error(){ 
    //Error 
    } 
} 
+0

Ja, ich aber habe zu tun, dass ich brauche einen Wert an die Funktion übergeben 2 die immer sagen, dass der Umfang nicht definiert ist. Ich bin mir nicht sicher, wo genau ich falsch liege – Marshall

0

Wenn Sie etwas initialisieren müssen, könnten Sie erwägen config oder laufen:

angular.module('myModule', []). 
config(function(injectables) { 

}). 
run(function(injectables) { 

}); 

mehr sehen hier: https://docs.angularjs.org/guide/module

0

Dies geschieht, weil Dienste asynchron aufgerufen werden. Sie könnten Kette, die Versprechen und den Wert zurück, den Sie in den nächsten Service benötigen und so weiter ...

getConfig.then(function (d) { 
 
    return d.data; 
 
}, function (error) { 
 
    
 
}).then(function(res){ 
 
    // Call second service with value returned from first service 
 
}).then(function(res){ 
 
    // Call third service with value returned from second service 
 
})

+0

Also, ich bin in der Lage, die Funktion auszuführen, wie Sie sagten, aber auch nachdem ich sehe, dass die Funktion zum ersten Mal ausgeführt wird, sagt der Bereich, dass es für undefiniert ist nächste Funktion – Marshall

+0

@Sandeep Können Sie mir zeigen, wie Sie es genau gemacht haben? –

+0

$ scope.getApp = function() {** Read(); ** // Funktion 1 hier aufrufen var sub = { "RID": $ scope.RID } var App = Servicename.getApp (sub) ; App.then (function (d) { $ scope.LID = d.data.BUser; }, Funktion (Fehler) { $ log.error ('! Opps ging etwas in immer appplication Standardwerte falsch'); }); } $ scope.getApp(); – Marshall

Verwandte Themen