2014-07-08 50 views
1

我寫它調用一個傳統的JavaScript我們正在使用在其他地方日期控件..我面臨的問題是ng-model我送的值定製指令總是不確定。值NG-模型的未定義定製指令

該值從在控制器執行的$http.get到來。該指令的代碼似乎在控制器代碼運行之前被觸發,這就是爲什麼會發生這種情況。有沒有辦法讓我告訴指令只在控制器初始化後運行?

app.directive('dateControl', function() { 
    return { 
     restrict: 'A', 
     require: '^ngModel', 
     scope: { 
      ngModel: '=' 
     }, 
     link: function (scope, element, attr) { 
      // scope.ngModel is undefined in here 
      alert(scope.ngModel); 
      addCalControlAngular(attr.id, scope.ngModel, attr.ngModel, attr.id); 
     } 
    } 
}); 


<td date-Control ng-model="postAward.letterOfAwardDespatchDate" id="letterofaward"> 
+0

以$表解決了這個在哪裏休息嗎?另外,嘗試做小提琴。 – Mosho

回答

0

我在鏈接功能

link: function (scope, element, attr) { 
      debugger; 
      // Watch for a value in ngModel and render that value, otherwise give a default 
      scope.$watch('ngModel', function (newVal) { 
       if (newVal) { 
        addCalControlAngular(attr.id, scope.ngModel, attr.isMandatory, attr.showDefault, attr.ngModel, attr.id); 
       } else { 
        addCalControlAngular(attr.id, c_NULL_DATE, attr.isMandatory, attr.showDefault, attr.ngModel, attr.id); 
       } 
      })    
     } 
3

控制器,如果它是內部控制器之前,該指令是不是「重災區」,但如果價值來自HTTP請求,那麼直到模型與價值(希望是有道理的)更新它的定義,以確保指令如果你這樣做的指令會在僅查看的ng-if要呈現從http接收數據,你可以做一個小竅門與ng-if

<td procon-Date-Control ng-if="postAward.letterOfAwardDespatchDate" ng-model="postAward.letterOfAwardDespatchDate" id="letterofaward"> 

後執行不爲空/未定義或表達truthy即NG-IF = 「postAward.letterOfAwardDespatchDate == '昨天'」

+0

很棒 - 這很好。在這種情況下,雖然我正在渲染日期控件,但如果模型中沒有任何內容,最好如何處理?使用這種 – Shorttylad

+0

,該指令將只顯示如果在模型中值..是嗎? – Shorttylad

+0

確實,你是正確的 – maurycy

-1

如果你想使用ngModel嘗試在鏈接功能添加參數添加註射這樣的:

link: function (scope, element, attr, ngModel) 

在此之後,你可以使用如下代碼ngModel.$render等,希望對您有所幫助。

+0

如果我將屬性ngModel重命名爲myNgModel,它是好的或ngModel(ng-model)屬性是強制性的以像自定義指令中那樣命名? – Osify

+0

鏈接帶有以下簽名,函數鏈接(範圍,元素,attrs,控制器,transcludeFn){...}的函數,其中: scope是一個角度範圍對象。 元素是此指令匹配的jqLit​​e-wrapped元素。 attrs爲與歸一化的屬性名的鍵 - 值對和它們相應的屬性值的哈希對象。 控制器是該指令的要求的控制器實例(S)或它自己的控制器(如果有的話)。確切的值取決於指令的require屬性。 transcludeFn是預先綁定到正確的包含範圍的跨鏈接鏈接函數。 – sarin