我有一个包含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";
}
}
}
答案 0 :(得分:1)
根据您在评论中的问题,询问如何将加载事件绑定到图像(如果它在交换机内)。
您可以做的是为图像创建指令,然后在链接函数
中绑定load事件.directive("myImageDirective", function(){
return {
restrict: 'C',
link: function(scope, element){
element.bind("load", function(){
console.log("element loaded");
scope.$apply();
});
}
};
});
jsfiddle:http://jsfiddle.net/kB4vq/
范围。$ apply();如果您需要角度,则让角度知道重新处理自己,因为负载发生在角度知识之外。您可以在此处详细了解:http://docs.angularjs.org/api/ng.$rootScope.Scope#$apply