[英]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.