So here's what I ended up doing:
I discovered you could pass a function to $scope.$watch
. From there, it's pretty straightforward to return the value of the expression you want to watch for changes. It will work exactly like passing a key string for a property on the scope.
link: function ($scope, $el, $attrs) {
$scope.$watch(
function () { return $el[0].childNodes.length; },
function (newValue, oldValue) {
if (newValue !== oldValue) {
// code goes here
}
}
);
}
I am watching childNodes
, not children
, because the childNodes
list holds elements as well as text nodes and comments. This is priceless because Angular uses comment placeholders for directives like ng-repeat
, ng-if
, ng-switch
and ng-include
which perform transclusion and alter the DOM, while children
only holds elements.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…