[英]How to call Angularjs directive after the return of another function?
我的网站上有类似以下的代码:
<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指令”) )
看起来有些可行,但我找不到解决方法...任何帮助/想法都将不胜感激!
编辑:我刚刚看到以下答案: 在AngularJS指令中运行链接功能之前,先在控制器中等待数据,这不是我要寻找的功能,因为someFunction与指令无关,并且我希望它保持尽可能独立(该功能放置在应用程序的控制器中,我不想直接从那里操作视图)。
编辑2:我知道使用超时的可能性,但我想使用更通用的解决方案。 随着超时,我将不得不猜测要等待多长时间,而我不想依赖于此。
编辑3:我将功能someFunction编辑为更具体的功能。 我无法更改someFunction的结构,也不想在onSuccess中完成指令的工作。
再次感谢!
如果将多个事件侦听器添加到同一元素,则将按照addEventListener()
调用的顺序执行它们。 例如
e.addEventListener('click', function(){ console.log('Click 1'); });
e.addEventListener('click', function(){ console.log('Click 2'); });
首先显示“点击1”,然后显示“点击2”。 Angular似乎不是这样,因为您说该指令首先触发。
如果您可以修改指令,则只需等待100毫秒左右。
link: function(scope, $elm) {
$elm.on('click', function() {
$timeout(function(){
console.log("in directive");
//do something
});
}, 100);
}
给控制器时间去做它的事情。
我建议您使用其他方法。 不要使用ng-click,而是将函数传递到指令中
app.directive(myDirective, function() {
return {
restrict: 'A',
link: function(scope, $elm, iattrs) {
$elm.on('click', function() {
scope.$eval(iattrs.myDirective)
.then(function(response) {
console.log("in directive");
//do something
});
});
}
}
});
请查看此矮人: https ://plnkr.co/edit/PaV6cCn0NmpBIVaJGAEL ? p = preview
它假定函数返回一个承诺
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.