2013-07-04 17 views
3

數據我已經設置了一個指令來處理加載一個jQuery海軍報圖與AngularJS:AngularJS + jQuery的海軍報+加載與http.get從控制器

var Dashboard = angular.module('StatsDashboard', []); 

Dashboard.directive('chart', function() { 
    return { 
     restrict: 'E', 
     template: '<div></div>', 
     replace: true, 
     link: function(scope, elem, attrs) { 
      var chart = null; 
      var data = scope[attrs.ngModel]; 
      var options = {} 

      $.plot(elem, data, options); 
      elem.show(); 
      } 
     }; 
}); 

從控制器的指令負荷:

function ChartCtrl($scope, $http) 
{ 
    $http.get('controllers/weekly_overview_charts.php').success(function(data) { 
     $scope.reg_vs_act = data; 
     }); 
} 

我得到一個「TypeError:無法在parseData中讀取未定義的 的屬性」長度「。

正面這是由於http函數的異步性質。

我的問題是,如何確保數據在指令嘗試加載flot圖表之前返回?

謝謝!

+0

實際上有很多flot指令的例子.. /gist.github.com/jrmoran/3966529您需要設置數據監視,並在繪製圖形之前確保數據有效。 –

回答

0

而答案我自己的問題:

scope.$watch(attrs.ngModel, function(v){ 
    if(v) 
    { 
     chart = $.plot(elem, v, options); 
     elem.show(); 
    } 
}); 

這是跳閘範圍$觀看了:

var data = scope[attrs.ngModel]; 

在這種情況下應該是簡單的attrs.ngModel。

0

我會說Erik的答案回答了這個問題,只是想補充說明顯示的錯誤可能是$scope.reg_vs_act未定義。所以 - 爲了解決錯誤,並支持在數據可用之前啓動圖表,您可以使用: