2014-03-19 86 views
0

我正在寫從指定網址加載數據應用於LineChart指令:Angularjs指令控制器:等待DOM做好準備

<line-chart dataurl="{{ some_url }}"></line-chart> 

然後在我的線型圖指示,我有這應該加載控制器數據:

directive('lineChart', function() { 
     return { 
      restrict: 'EA', 
      scope: { 
       dataurl: '@' 
      }, 
      controller: function($scope, $http){ 

      $http.get($scope.dataurl) 
       .success(function(data) { 
        $scope.data = data; 
       }); 
      }, 
      link: function(scope, element, attrs) { 
       ... 

這裏的問題是,控制器被調用之前DOM就緒,這意味着dataurl =「」,我得到一個404錯誤。我想有一個使用$超時服務的解決方案,但我不需要整個DOM準備好,只有<line-chart>部分。 我該怎麼辦?

謝謝。

回答

1

使用NG-attr- *指令,而不是讓角度構建真正的屬性在正確的時間:

<line-chart ng-attr-dataurl="some_url"></line-chart> 

比照http://docs.angularjs.org/guide/directive

編輯:請注意,您需要一個$scope.some_url變種在你的控制器

+0

謝謝,但它仍然無法正常工作。當我在我的指令控制器中使用'console.log($ scope.dataurl)'時,即使使用ng-attr-屬性,我也有一個空字符串。 也許我會避免使用一個控制器和instaead寫一個'$手錶。(dataurl)'在向鏈路部分,做什麼,如果它的空重數據,如果它不是,但它不是很優雅... – lewer

+0

噢,抱歉我編輯我的帖子,刪除括號。嘗試發佈jsfiddle如果它不工作 –

+0

其實我認爲我需要括號,因爲some_url取決於一個名爲topicId的變量。 這裏有一個的jsfiddle http://jsfiddle.net/zRxj8/5/但它沒有真正的工作,因爲我不知道如何處理D3依賴和XHR調用 – lewer