簡體   English   中英

返回另一個函數后如何調用Angularjs指令?

[英]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的結構,也不想在o​​nSuccess中完成指令的工作。

再次感謝!

如果將多個事件偵聽器添加到同一元素,則將按照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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM