element.find不适用于ng-switch中的嵌套元素

时间:2013-04-14 16:10:36

标签: javascript jquery angularjs angularjs-directive

我有一个包含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";
        }
    }
}

jsFiddle example

1 个答案:

答案 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