2017-02-19 94 views
0

我有2个函数bindclub()和displayevent()。我想向bindclub()来运行第一always.I也试图把两者的功能在NG-初始化,但它也不能保证运行bindclub()第一如何确保2个函数中的一个先运行

angular.module('app', []).controller("EventCtrl",EventController); 
EventController.$inject = ["$scope", "$http", "$window"]; 

function EventController($scope, $http, $window) { 
    $scope.bindclub = function() { 
      $http({ 
       url: '/Master/bindclub', 
       method: 'post', 

      }).then(function (response) { 
       debugger 
       $scope.clubidname = response.data; 
      }, function() { alert("Error in binding club"); }); 
     } 


     $scope.displayevent = function() { 
      $http({ 
       url: '/Master/displayevent', 
       method: 'post', 

      }).then(function (response) { 
       alert('Displayed'); 

      }, function() { alert('Error in display event'); }); 

     } 
    $scope.bindclub(); 
    $scope.displayevent(); 
} 
+1

可能重复的[如何在JavaScript中触发事件?](http://stackoverflow.com/questions/2490825/how-to-trigger-event-in-javascript) – ultrajohn

回答

0

使用回调函数等到bindclub函数执行,然后开始displayevent功能

angular.module('app', []).controller("EventCtrl", EventController); 
    EventController.$inject = ["$scope", "$http", "$window"]; 

    function EventController($scope, $http, $window) { 
     $scope.bindclub = function(callback) { 
      $http({ 
       url: '/Master/bindclub', 
       method: 'post', 
      }).then(function(response) { 
       debugger 
       $scope.clubidname = response.data; 
       callback() // callback function 
      }, function() { 
       alert("Error in binding club"); 
       callback()// callback function 
      }); 
     } 
     $scope.displayevent = function() { 
      $http({ 
       url: '/Master/displayevent', 
       method: 'post', 
      }).then(function(response) { 
       alert('Displayed'); 
      }, function() { 
       alert('Error in display event'); 
      }); 
     } 
     $scope.bindclub(function() { 
      $scope.displayevent(); // this execute after bindclub fucntion 
     }); 
    } 
1

是第二个事件依赖第一个事件?如果是,则可以将其设置为第一个事件的回调事件,以确保它在第一个事件成功时触发。

0

函数bindclub确实在displayevent之前运行。但是这两个函数本身使得http调用具有回调。无法保证以您想要的顺序执行回调。

我看到的唯一工作是在bindclub中调用回调函数内的其他函数。

另一种方式是让你连锁回调。

0

您可以将displayEvent附加到在bindEvent回调中触发的自定义事件。

看看这个SO后,例如如何做到这一点。

0

回报的承诺,然后把它们连:

$scope.bindclub = function() { 
    //vvvv RETURN httpPromise   
    return $http({ 
     url: '/Master/bindclub', 
     method: 'post', 

    }).then(function (response) { 
     debugger 
     $scope.clubidname = response.data; 
    }, function() { alert("Error in binding club"); }); 
} 

//CHAIN them 
$scope.bindclub() 
    .then(function() { 
     $scope.displayevent(); 
}); 

由于$ HTTP服务返回一个承诺,第二操作可以从第一次操作与第一次承诺的方法链接。

相关问题