2017-09-15 9 views
1

ng-initで2秒ごとに関数を呼び出すために、Angle 1で$ timeoutを使用しようとしています。

ng-init="$timeout(sc.displaySorted(), 2000)" 

sc.displaySorted()は、100個のソートされた図形をDOMに表示する関数です。これはng-initで動作しますが、2秒ごとにリフレッシュさせることはできませんでした。私も$ route.reloadと再帰を試しました。

はここvm.displaySorted機能である:

vm.displaySorted = function() { 
//calls generateFunc and pass total of 50 shapes 
var allShapes = generateFunc(50); 
//calls sortingFunc with argument of all shapes 
var sortedShapes = sortingFunc(allShapes); 
for(i = 0; i < sortedShapes.length; i++) { 
    var shape = sortedShapes[i] 
    if(shape.type === "square") { 
    vm.shapesToDisplay.push(sortedShapes[i]); 
    } 
    if(shape.type === "circle") { 
    vm.shapesToDisplay.push(sortedShapes[i]); 
    } 
} 

}; //最後はvm.displaySorted

答えて

1

何あなたが探していることは$intervalサービスです。あなたはこのようにそれを使用することができます:

$interval(displaySorted, 2000) 

  • が、私はちょうど機能を置くことをここにお知らせし、それはないの呼び出し(なし丸括弧を)。 $intervalはビューではなく、コントローラ(AngularJSによって注入サービス)で利用できないので、あなたは、関数の機能のラッパーをしなければならないので、あなたがあなたに行わない

  • ng-init="$interval(sc.displaySorted, 2000)"を表示します。下のサンプル全体を参照してください。

angular 
 
    .module('app', []) 
 
    .controller('myctrl', function($interval) { 
 
    var vm = this; 
 
    vm.wizard = { 
 
     displaySorted: fnDisplaySorted, 
 
     init: fnInit 
 
    } 
 

 
    return vm.wizard; 
 

 
    function fnInit() { 
 
     $interval(fnDisplaySorted, 2000); 
 
    } 
 

 
    function fnDisplaySorted() { 
 
     console.log('printing'); 
 
    } 
 

 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 

 
<div ng-app="app" ng-controller="myctrl as ctrl" ng-init="ctrl.init()"> 
 
</div>

+0

は、それは、関数呼び出しである必要はないでしょうか? –

+0

いいえ、そのように書くと、関数を実行しています(途中で、あなたが望むものではありません)。あなたは関数を置く必要があり、サービスはあなたのために残りの部分を実行します(X間隔ごとに実行してください!) – lealceldeiro

+0

うん、私はそれを試みると、まったく呼び出されません。 –

0
このため

使用$interval、あなたは以下の例を参照し、コントローラにそれを含める必要があります。 $間隔(sc.displaySorted()、2000):

var app = angular.module('myApp', []); 
 

 
app.controller('MyController', function MyController($scope, $interval) { 
 
    this.displaySorted = function() { 
 
    console.log("every 2 seconds"); 
 
    } 
 
    this.runThis = function(){ 
 
    $interval(this.displaySorted, 2000); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-controller='MyController as sc' ng-app="myApp" ng-init="sc.runThis()"> 
 

 
</div>

+0

viewSorted()をビューモデルに設定する必要はありませんか?私は実際にいずれかの方法で試してみましたが、まだ動作していません。 –

+0

@MattLarsonコントローラコードを共有できますか?すべてではなく、 'displaySorted'関数とコントローラブロックだけです。 'sc {$ scope} 'または{this} –

+0

メインスレッドに追加しました:) –

関連する問題