繁体   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