2016-04-24 16 views
0

次のコードスニペットでは、関数内のコードを(var layout_urlで始まり、fillLayoutData(xFactory, val.position, val.url, val.height, cType);で終わる)間隔で呼び出したいと思います。角度コントローラのコードを間隔で呼び出す

rp3.controller('c1Ctrl', [ 
    '$scope', 
    'xFactory', 
    function($scope, xFactory) { 

     var layout_url = "json/dashboard/layout/mpu/layout.json"; 

     xFactory.getJSON(layout_url, function(layout) {// read layout's web 
      // service 
      $.each(layout, function(i, val) { 
       chart.push({ 
        "v" : val, 
        "x" : xFactory 
       }); 
       var cType = getChartType(val.chartType); 
       // alert(cType); 
       drawLayout(parentDIV.name, val.position, val.width, 
         val.height, val.title, val.color, val.bgcolor, 
         buttomCtrl.withCtrl, cType); 
       fillLayoutData(xFactory, val.position, val.url, val.height, 
         cType); 
      }); 
     }, function() { 
      console.log("Connection! "); 
     }); 
    } ]); 

どうすればこの問題を解決できますか?

+0

コード部分をコントローラメソッドとして公開し、必要な操作をすべて行うことができます。 –

答えて

1

あなたがそれを行うための最も簡単な方法はある間隔で呼び出し、$間隔

rp3.controller('c1Ctrl', [ 
'$scope', 
'xFactory', 
'$interval', 
function ($scope, xFactory, $interval) { 

    var layout_url = "json/dashboard/layout/mpu/layout.json"; 

    $scope.myIntervalFunction = function() { 
     xFactory.getJSON(layout_url, function (layout) {// read layout's web 
      // service 
      $.each(layout, function (i, val) { 
       chart.push({ 
        "v": val, 
        "x": xFactory 
       }); 
       var cType = getChartType(val.chartType); 
       // alert(cType); 
       drawLayout(parentDIV.name, val.position, val.width, 
        val.height, val.title, val.color, val.bgcolor, 
        buttomCtrl.withCtrl, cType); 
       fillLayoutData(xFactory, val.position, val.url, val.height, 
        cType); 
      }); 
     }, function() { 
      console.log("Connection! "); 
     }); 
    } 


    var interval = $interval(function(){ 
     return $scope.myIntervalFunction() 
    },100) 
}]); 
0

でそれを呼び出したい関数でコードのプット一部:

$intervalサービスを注入
  • コントローラー
  • メソッド内に必要なコードをすべてラップします。
  • は、メソッドを呼び出すために$間隔のサービスを使用して

コード例遅延を設定します。

rp3.controller('c1Ctrl', ['$scope','xFactory','$interval' 
    function($scope, xFactory, $interval) { 


    var layout_url = "json/dashboard/layout/mpu/layout.json"; 


    //1. Wrap all the necessary code inside a method 
    $scope.foo = function(){ 
     xFactory.getJSON(layout_url, function(layout) { // read layout's web 
     // service 
     $.each(layout, function(i, val) { 
      chart.push({ 
      "v": val, 
      "x": xFactory 
      }); 
      var cType = getChartType(val.chartType); 
      // alert(cType); 
      drawLayout(parentDIV.name, val.position, val.width, 
      val.height, val.title, val.color, val.bgcolor, 
      buttomCtrl.withCtrl, cType); 
      fillLayoutData(xFactory, val.position, val.url, val.height, 
      cType); 
     }); 
     }, function() { 
     console.log("Connection! "); 
     }); 
    }; 



    //2. use $interval service. I use 2s delay (2000ms) 
    $interval($scope.foo, 2000); 



    } 
]); 

追加注:ちょうどラップする必要が

  • getJSON()機能は必要ありませんので、layout_url可変ではありませんその価値は決して変わらないからです。
+0

$ scope。$ destroyで$ intervalをキャンセルすることを確認してください。 –

+0

'fillLayoutData(xFactory、val.position、val.url、val.height、cType)のみを更新したいのですが?関数をループの内側に移動しようとしましたが、これによってコードは最後のグラフのみを更新します。 –

+0

@BlairOsbayは問題が何であるかを正確に理解しています。おそらく、間隔が実際に開始する前に、最初の項目から最後の項目まで繰り返す各ループがあるからです。だからあなたはそれが最後のアイテムだけに適用されているのを見ます。この新しい問題を含む元の投稿を編集できますか? – fbid

関連する問題