2015-04-03 46 views
0

我想通過鏈接函數的id訪問指令模板中的元素。 但是,元素ID是數據綁定的,並且在鏈接函數運行時似乎不可用。getElementByID從數據綁定的鏈接函數編號

我已經證明了這Plunker問題:http://plnkr.co/edit/vmgT3CaUbkaPNn6gDHJh

link: function (scope) { 
    var textbox = angular.element(document.getElementById(scope.id)); 

      textbox.bind('blur', function() { 
      scope.$apply(function() { 
       scope.value = textbox.val(); 
      }); 
      }); 

如果我硬編碼這個工程確定的元素的ID - 但作爲證明這個叉:http://plnkr.co/edit/5qML3rGBwiCC7fc8eKVf因爲我通過附加一個事件監聽器ID,如果我重新使用硬編碼的ID,我沒有得到我需要的指令實例的隔離。

link: function (scope) { 
      var textbox = angular.element(document.getElementById('id')); 

      textbox.bind('blur', function() { 
      scope.$apply(function() { 
       scope.value = textbox.val(); 
      }); 
      }); 
     } 

是否有一個函數以外的鏈接,我可以在數據綁定ID將可用時運行此代碼?或者我只是試圖完全以錯誤的方式做到這一點?

+1

你似乎是綁定到文本框本身,所以你可以使用'ng-blur'。 'ng-model'也可以工作,但是當按下按鍵而不僅僅是模糊時,這將會改變。 – 2015-04-03 22:38:05

回答

0

謝謝@Explosion Pills;你是對的;通過使用Angular中已有的功能,您可以更輕鬆地完成此任務。

我已經分叉的Plunker與更新後的代碼:http://plnkr.co/edit/e0jD6RnwXbRQOc9NfdiS

link: function (scope) { 
      scope.blur = function(){ 
      console.log(scope.value); 
      } 
     } 

和模板:

<div> 
<label for="{{::id}}">{{::label}}</label> 
<input class="form-control" id="{{::id}}" type="{{::type}}" placeholder=" {{::placeholder}}" ng-model="value" ng-blur="blur()"> 
<div>{{value}}</div> 
</div> 

我仍然有一個時間在模板中的ID的綁定,因爲它是由標籤使用;但是指令本身是使用ng函數構建的。