我有一个包含ng-switch
DOM元素的指令。我需要将事件绑定到ng-switch下的DOM节点,但由于某种原因,element.find不会返回switch元素下的任何节点!element.find不适用于ng-switch中的嵌套元素
在下面的例子中,我希望element.find("*")
返回ng-switch,一个div和按钮,但它只返回ng-switch和按钮。
我该如何解决这个问题?或者以不同的方式从链接函数到达ng-switch下的DOM节点?
代码重现:
HTML
<div ng-controller="myCtrl" class="container">
<div my-directive>
<ng-switch on="selection">
<div ng-switch-when="A" class="a">A</div>
<div ng-switch-when="B" class="b">B</div>
<div ng-switch-default>default</div>
</ng-switch>
<button ng-click="switchSelection()" >switch</button>
</div>
</div>
JS
angular.module('myApp', [])
.directive("myDirective", function() {
return {
link: function(scope, element, attrs) {
console.log(element.find("*"));
console.log("Didn't find my divs :(");
}
}
});
function myCtrl($scope) {
$scope.selection="B";
$scope.switchSelection=function(){
if ($scope.selection=="B"){
$scope.selection="A";
}
else{
$scope.selection="B";
}
}
}
'ng-switch'只会在DOM中放置适用的元素,而不是全部。检查浏览器控制台中的实时HTML,只会看到一个DIV。你想做什么? – charlietfl
不过,这意味着find()会返回一个div,而不是。 – OpherV
当在角度创建的元素上使用DOM操作时,最好在'$ timeout'中包装DOM搜索代码。 http://jsfiddle.net/KCPVZ/3/。即使持续时间为零,它也会提供消化循环机会来完成 – charlietfl