单击时从自定义指令调用函数? - AngularJS

时间:2015-04-13 11:23:54

标签: javascript angularjs angularjs-directive angularjs-scope

我在按钮点击时从我的自定义指令调用一个函数。

这是我在JSP中的代码

<input type="button" value="button" text="{{item.id}}" data-href="divSlide" show-notifications>

这是我的自定义指令

    hello.directive("showNotifications", ["$interval", function($interval, $scope) {
    return {
        restrict: "A",
        link: function(scope, elem, attrs) {            
            //On click
            $(elem).click(function() {
                console.log('before');              
                scope.$parent.getJSON(scope.text);
               if ($('tr#' + $(this).data("href")).is(":visible")) {
                    $('tr#' + $(this).data("href")).remove();
                } else {

                    console.log('after');
                    $(this).closest('tr').after('<tr id="' + $(this).data("href") + '"><td colspan="5">' + $('#' + $(this).data("href")).html() + '</td></tr>');                    
                }    
            });
        },
        scope:{
            text: "@text"
        }
    };
}]);

这是我的功能

$scope.getJSON= function(id){
        jsonService.getJSONData(id).then(function(data){
            $scope.data= [];                
                $scope.data= data['dataList'];
                console.log('insidejson');              
            }
           });
    };

当我执行代码时,控制台按以下顺序打印日志,

before
after
insidejson

但理想情况下应该是

before 
insidejson
after

为什么在执行函数之前在函数调用之后执行下一个语句?

我做错了什么?

1 个答案:

答案 0 :(得分:1)

功能

   jsonService.getJSONData(id).then(function(data){
        $scope.data= [];                
            $scope.data= data['dataList'];
            console.log('insidejson');              
        }
       });

是一个异步函数。因此它将在最后执行