2012-11-19 90 views
0

我有這個指令Angularjs + kendoui下拉列表

angular.module('xxx', [ 
]) 
    .directive('qnDropdown', [ 
     '$parse', 
     function($parse) { 
      return { 
       restrict: 'A', 
       require: 'ngModel', 
       link: function(scope, elem, attr, ngModel) { 
        scope.$watch(attr.qnDropdown, function(source) { 
         var model = $parse(attr.ngModel); 

         elem.kendoDropDownList({ 
          dataTextField: "Name", 
          dataValueField: "ID", 
          value: attr.value, 
          select: function(e) { 
           var item = this.dataItem(e.item.index()); 
           scope.$apply(function() { 
            model.assign(scope, item.value); 
           }); 
          }, 
          //template: '<strong>${ data.Name }</strong><p>${ data.ID }</p>', 
          dataSource: source 
         }); 

        }); 
       } 
      }; 
     }]); 

輸入字段

<input qn:dropdown="locations" ng:model="installation.LocationID" value="{{installation.LocationID}}" /> 

一切工作的kendoDropDownList正常,但初始值不填充(價值:attr.value)。 我想我在錯誤的地點或時間做某事,但不知道是什麼?

回答

0

您可能需要使用$observe

使用$observe觀察到,含有插(例如src="{{bar}}")屬性值的變化。這不僅非常高效,而且也是輕鬆獲取實際值的唯一方法,因爲在鏈接階段插值尚未進行評估,因此此時將值設置爲未定義。 - docs,請參見部分屬性

這裏是an example最近我用$觀察。另請參閱@ asgoth的答案,他在那裏使用$ watch,但他也創建了隔離範圍。

當我們需要使用$ observe和使用$ watch時,我還不清楚。

0

您確定{{installation.LocationID}}有您期望的值嗎?我能夠複製粘貼你的代碼,並根據我的情況做一些調整,下拉列表功能非常好(謝謝你爲我做的辛苦工作!)。我在輸入字段中填充了value,當指令執行時,attr.value擁有它,Kendo按預期顯示它。也許這是幾個版本之前的一個角度問題?

0

我有同樣的問題,attr.value是空的。這個問題與獲取數據的$ http異步調用有關。在指令中定義下拉列表時,範圍數據尚未填充。

我通過在指令的鏈接功能中觀看attr.ngModel而不是attr.qnDropdown來解決此問題。這樣,當範圍數據填充時,下拉列表就會被定義。