2016-08-23 6 views
-1

Ich habe MyExampleController Controller, der von bestimmten verfügbaren Daten abhängt. Zum Beispiel - auf myService Service, der diese Daten enthält, wenn myService.dataIsAvailable()true ist. Jetzt greife ich auf bestimmten Controller zu, ich möchte prüfen, ob es true zurückgibt, wenn ja, init();, andernfalls, wenn es jemals true wird, feuern Sie die init();. Wie mache ich es?Funktion ausführen, wenn die Variable wahr ist oder wahr wird

angular.module('angularUiApp').controller('MyExampleController', function()  { 
    function init() { 
     console.log('do some stuff'); 
    } 

    // init single time only when myService.dataIsAvailable() is true or execute init() when myService.dataIsAvailable() becomes true. 
    init(); 
}); 

Antwort

0

Schrieb meine eigenen Frieden Code

var initInterval = null; 
var timeMs = 100; 

initInterval = $interval(function() { 
    if (myService.dataAvailable()) { 
     $interval.cancel(initInterval); 
     init(); 
    } 
}, timeMs); 
0

Injizieren Sie Ihren Service an Ihre Steuerung und überprüfen Sie den Wert, den Sie benötigen, sonst

angular.module('angularUiApp').controller('MyExampleController', ['myService', function(myService)  { 
    function init() { 
     if(!myService.dataIsAvailable()){ 
      setTimeout(function() { // try again later - you could do that with a while loop also, whatever suits your needs 
          init(); 
      }, 400); 
     else{ 
      // do stuff 
     } 
     } 
    } 

    // init single time only when myService.dataIsAvailable() is true or execute init() when myService.dataIsAvailable() becomes true. 
    init(); 
}]); 

P. S .: warten stellen Sie sicher, myService Skript vor dem Controller Skript geladen wird.

Viel Glück :)

0

Sie können die Daten aus dem Dienst beobachten und die init-Funktion auszuführen, wenn die Daten wahr wird. So wird der Code wie:

angular.module ('angularUiApp') .Controller ('MyExampleController', [ '$ Intervall', 'myService', Funktion ($ Intervall, myService) {

var checkingForData; 

    function init() { 
     console.log('do some stuff'); 
    } 

    var doSomeTask = function(){ 
     /* init single time only when myService.dataIsAvailable() is true or execute init() 
     when myService.dataIsAvailable() becomes true. */ 
     init(); 
     if(checkingForData) $interval.cancel(checkingForData); // cancel interval after getting data 
    }; 

    checkingForData = $interval(function(){ 
     if(myService.dataIsAvailable()){ 
      doSomeTask(); 
     } 
    }, 1000); 

} 

]);

Ich hoffe, es wird funktionieren.

Verwandte Themen