angular.js从指令中的$ evalAsync内部获取元素

时间:2013-11-27 11:34:15

标签: angularjs angularjs-directive angularjs-scope

我发现我正在使用范围。$ evalAsync在指令中非常多。主要是做DOM东西/ jquery插件,需要编译所有模板{{vars}}。

我可以从$ evalAsync内部获取scope对象,但不能获取元素。在最新的案例中,我正在操纵一个使用ngRepeat渲染的元素。我目前通过基于范围对象组合jquery选择器来获取元素,例如

scope.$evalAsync(function (scope) {
    $("#item-" + scope.id).runJQplugin();
})

虽然这有效,但对我来说,能够做到这一点会更直观

scope.$evalAsync(function (scope,element) {
    element.runJQplugin();
})

我接近这个权利还是我误解了指令的基本内容?

1 个答案:

答案 0 :(得分:1)

您始终可以通过闭包范围访问链接和指令控制器中的元素。所以在链接功能中:

link: function(scope, elem, attrs) {
    ...
    scope.$evalAsync(function(scope) {
        elem.runJQplugin();
    });
    ...
},

Controller(您需要指定特殊的$element依赖项):

controller: ["$scope", "$element", function($scope, $element) {
    ...
    scope.$evalAsync(function(scope) {
        $element.runJQplugin();
    });
    ...
}],