仅当数据在DOM中呈现后,才在指令中调用jquery插件

仅当数据在DOM中呈现后,才在指令中调用jquery插件,jquery,angularjs,angularjs-directive,Jquery,Angularjs,Angularjs Directive,我想在angular指令中初始化jquery插件,但只有在返回服务数据并在DOM中创建第一个渲染器之后。 我似乎能想出如何在角度指令中做到这一点。 到目前为止,我已经有了这段代码,但我似乎是在服务数据到达之后调用插件,但在它在DOM上呈现之前。。。 有什么提示吗 myApp.directive('myDirective', function () { return { restrict: 'A', link: function ($scope, element, attrs) {

我想在angular指令中初始化jquery插件,但只有在返回服务数据并在DOM中创建第一个渲染器之后。 我似乎能想出如何在角度指令中做到这一点。 到目前为止,我已经有了这段代码,但我似乎是在服务数据到达之后调用插件,但在它在DOM上呈现之前。。。 有什么提示吗

myApp.directive('myDirective', function () {
return {
    restrict: 'A',
    link: function ($scope, element, attrs) {
        $scope.$watch("data.length", function( newValue, oldValue ) {
            if ( newValue === oldValue ) {
                console.log( "Should return..." );
                return; 
            }
            $(element).elastislide();
        });
    }
};
}))

==编辑==== 如果我使用setTimeout函数推迟执行,它会工作,这是正确的方法吗

    myApp.directive('myDirective', function () {
return {
    restrict: 'A',
    link: function ($scope, element, attrs) {
        $scope.$watch("data.length", function( newValue, oldValue ) {
            if ( newValue === oldValue ) {
                console.log( "Should return..." );
                return; 
            }
            postpone = $timeout(function() {
                  $('#carousel').elastislide();                 
            }, 100);

        });
    }
};

}))

如果首先需要DOM来渲染,请使用


如果只需要更新DOM(但尚未渲染),请使用。先试试这个,因为它可以防止闪烁。

您的指令是否负责创建一些所需的DOM元素?如果您在angular指令中包含html标记,这将有助于澄清。更好的是,创建一个jsbin.com或jsfiddle.net。正如您在上面的代码中看到的,该指令中不包含html。一般来说,我试图找到一种解决方案,仅在DOM加载完成后处理指令上的数据。。。我认为创建一个jsbin.com会很有帮助。对于这样的问题,您确实需要发布一个plunker或JSFIDLE。哪里是
数据。长度
来自哪里??您还忘记将
$timeout
作为控制器函数的参数传递。这听起来像是在渲染后运行回调函数或自定义事件所需要的。如果您将超时设置为0,它是否有效?我没有找到类似
$evalAsync
的内容。这是AngularJS最新版本的一部分吗?还是已经被埋了?