2016-08-17 121 views
0

HTML

<a custom-attr='{{ controller.object.value }}' data-ng-model='controller.object.value'> 

角指令

.directive('customAttr', function() { 
    return { 
     require: 'ngModel', 
     controller: 'ControllerName', 
     controllerAs: 'cName', 
     link: function (scope, el, attr, ctrl) { 
      el.on('click', function ($event) {    
       if (ctrl.$viewValue && attr.customAttr) { // breakpoint 
       } 
      }) 
     } 
    } 
}) 

目標:

看到attr.customAttr正確的值在第一時間指令運行。AngularJS自定義屬性不計算第一次指令運行

說明

在斷點處的if語句停止指令的鏈接功能裏面,我希望看到一個布爾值。我已經驗證了模型中使用$log.log()的布爾值是正確的。不幸的是,指令第一次運行時,attr.customAttr評估爲對模型值(調試器中的'controller.object.value')的引用字符串,然後在指令的後續迭代中正確評估布爾值。我嘗試從屬性中移除大括號,然後我得到一個不變的空字符串。

我能做些什麼會導致模型值第一次正確評估?

注:我已經做了一個類似的版本,以前沒有問題的數值。關鍵區別似乎是工作版本位於輸入元素上,並且同時具有ngModel和ngValue屬性。

回答

0

事實證明,控制器和控制器的屬性對此有影響。我刪除它,但後來決定我寧願有控制器,所以我用隔離範圍來評估對象,而不是從attr屬性讀取它。

0

考慮使用

attrs.$observe('customAttr', function() {  
    scope.customAttr= scope.$eval(attrs.customAttr); 
}); 

正確雙重約束.attrs(因此,可能解決您的問題)到您的指令。

更多的信息在answerdocs

+0

這不適合我,但謝謝! – Kraken