【发布时间】:2013-04-14 16:10:35
【问题描述】:
我有一个包含ng-switch DOM 元素的指令。我需要将事件绑定到 ng-switch 下的 DOM 节点,但由于某种原因 element.find 不会返回 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。你想做什么? -
不过,这意味着 find() 将返回一个它不会返回的 div。
-
在对 Angular 创建的元素使用 DOM 操作时,最好将 DOM 搜索代码包装在
$timeout中。 jsfiddle.net/KCPVZ/3。即使持续时间为零,它也有机会完成摘要循环 -
对于你想要做的事情来说,直接 DOM 操作真的有必要吗? Angular 通常会提供一种更简单的方法。
-
@Rosarch 最终目标是在我的
ng-switch下的指令中绑定一些图片的加载事件。否则您将如何访问图像元素并从链接函数绑定“加载”事件?
标签: javascript jquery angularjs angularjs-directive