0

我很难理解为什么我的指令似乎无法正常工作。这是问题的快速概述:

我使用包含 Angular 元素的 Ajax 加载 HTML。Ajax 响应是 $compiled,所以这些元素可以工作,但问题是我必须用 0 秒超时。

<div my-directive button="bar">
    <button id="foo">Foo</button>
</div>
<button id="bar">Hi!</button>

和js:

app.directive('myDirective', function() {
return {
    link: function(scope, element, attrs) {
        var foo = element.find('button');
        var bar = $(attrs.button);
    }
};
});

在我用 setTimeout(..., 0); 包围它们之前,将找不到上面的 foo-bar 元素。

有人可以告诉我是否有更好的方法可以在没有 setTimeout 的情况下访问它们?

4

1 回答 1

1

您正在做的是实现此目的的正确方法,但您应该使用 $timeout。

app.directive('myDirective', function($timeout) {
return {
    link: function(scope, element, attrs) {
        $timeout(function() {
           var foo = element.find('button');
           var bar = $(attrs.button);
        },0);
    }
};
});

它只是改变javascript中执行代码的优先级。

于 2014-05-19T10:27:56.800 回答