【发布时间】:2016-06-27 07:27:05
【问题描述】:
我的网站上有一个类似于以下的代码:
<div ng-click=someFunction() my-directive>...</div>
<div ng-show=showMe>...</div>
someFunction() 函数如下所示:
function onSuccess() {
// do something
console.log("in response")
}
function someFunction() {
$http(
{
...
}).then(onSuccess);
}
指令my-directive的创建如下:
app.directive(myDirective, function() {
return {
restrict: 'A',
link: function(scope, $elm) {
$elm.on('click', function() {
console.log("in directive");
//do something
});
}
}
});
问题是我需要指令仅在 onSuccess 完成加载后而不是之前触发(即,我想在控制台中看到“in 指令”之前的“响应”,现在我看到“in指令”第一)
看起来可行,但我找不到如何... 任何帮助/想法将不胜感激!
编辑: 我刚刚看到了这个答案:Wait for data in controller before link function is run in AngularJS directive 这不是我想要的,因为函数 someFunction 独立于指令,我希望它尽可能保持独立(该函数放置在应用程序的控制器中,我不想直接从那里操作视图)。
编辑 2: 我知道使用超时的可能性,但我宁愿使用更通用的解决方案。如果超时,我将不得不猜测要等待多长时间,我不想依赖它。
编辑 3: 我将函数 someFunction 编辑为更具体的函数。我无法更改 someFunction 的结构,也不想在 onSuccess 中执行指令的工作。
再次感谢!
【问题讨论】:
-
这个SO answer 可能就是您要找的。请忽略此评论。
-
@alex_andrea 我会提出相同的建议,但我认为它不适用于同一对象上的属性指令和点击侦听器。您只能添加或删除带有
ng-if的元素,而不是元素的属性。 -
@ssc-hrep3 我从来没想过。感谢您指出。:)
-
感谢您的 cmets,但正如@ssc-hrep3 指出的那样,上述答案在这里无济于事。谢谢:-)
-
在您的场景中,您有链接到 DOM 元素单击事件的响应,因此我们不能使用 ng-if。所以去 $timeout 功能。
标签: javascript angularjs http angularjs-directive