我很难理解为什么我的指令似乎无法正常工作。以下是问题的快速概述:
我使用包含Angular元素的Ajax加载HTML。 Ajax响应是$编译的,所以这些元素可以工作,但问题是我必须用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 elemenets;
有人可以告诉我,如果没有setTimeout,是否有更好的方法可以访问它们?
答案 0 :(得分: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中执行代码的优先级。