2013-10-21 34 views
5

我有一個簡單的指令角 - 上偵聽transcluded變化

angular.module('myApp') 
    .directive('myDirective', function() { 
     return { 
      template: '<p ng-transclude></p>', 
      restrict: 'A', 
      transclude: true, 
      link: function postLink(scope, element, attrs) { 
      } 
     } 
    } 
); 

我想每個transclusion內容的變化和指令渲染的時候運行代碼 - 我需要transcluded內容。

實施例的算法,我想在這種情況下運行是:

  • 的transcluded內容計數的話。

我試過scope.$watch以多種形式,但無濟於事。

回答

11

我們可以使用包含在Angular中的jqlite內部的監視表達式函數來實現這一點。下面是使用jqLit​​e(element.text().length)觀察transcluded元素長度的代碼。只要該指令附加的元素的長度發生變化,該手錶就會觸發。

而新的長度作爲newValue傳遞給手錶內的第二個功能(因爲我們從第一個手錶功能中返回它)。

myApp.directive('myDirective', function() { 
    return { 
     template: '<p ng-transclude></p>', 
     restrict: 'A', 
     transclude: true, 
     replace: true, 
     link: function (scope, element, attrs) { 

      scope.$watch(function() { 
       return element.text().length; 
      }, 

      function (newValue, oldValue) { 
       console.log('New Length ', newValue); 
      }); 
     } 
     } 
    }); 

我有一個工作的jsfiddle這裏:

http://jsfiddle.net/2erbF/6/

這解決了字/字母數的情況。但是如果你需要它在任何變化上發射 - 而不僅僅是長度變化,你可以在element.text()上寫一個測試。

+1

非常感謝。我所要做的就是看功能!我不敢相信我沒有嘗試過。 :) –