我如何回复承诺以满足指令?

时间:2017-07-05 22:31:51

标签: javascript angularjs es6-promise

我有以下代码,我尝试了回合一切可以使用该指令的承诺。我甚至尝试返回响应数据并返回$ q.when(数据)而没有。我曾尝试阅读承诺,这一点与我读过的有点不同。我缺少的东西?

myApp.controller('smsCtrl', function($scope){
        $scope.sendSMS = function(){
            let sms = {'number': $scope.number  ,'message': $scope.message};
            serviceNameHere.sendSMS(sms).then(function(response){
                $scope.smsSuccessMsg = "Message Sent Successfully";
            }, function(response){
                $scope.smsErrorMsg = response.data['message'];
            });
    };         
})

myApp.directive('onClickDisable', function() {
  return {
    scope: {
      onClickDisable: '&'
    },
    link: function(scope, element, attrs) {
      element.bind('click', function() {
        element.prop('disabled',true);
        scope.onClickDisable().finally(function() {
          element.prop('disabled',false);
        })
      });
    }
  };
});

以下html

<div ng-controller="smsCtrl">
<-- field inputs here --></-->
    <button type="button" class="btn btn-primary" on-click-disable="sendSMS()">SEND</button>
</div>

session hijacking

1 个答案:

答案 0 :(得分:1)

没有必要为此制定特殊指令。只需使用ng-disabledng-click

即可
<div ng-controller="smsCtrl">
    <!-- field inputs here -->
    <button ng-click="sendSMS()" ng-disabled="pendingSMS">
      SEND
    </button>
</div>

在控制器中:

myApp.controller('smsCtrl', function($scope, serviceNameHere){
        $scope.sendSMS = function(){
            let sms = {'number': $scope.number  ,'message': $scope.message};
            $scope.pendingSMS = true;
            serviceNameHere.sendSMS(sms).then(function(response){
                $scope.smsSuccessMsg = "Message Sent Successfully";
            }, function(response){
                $scope.smsErrorMsg = response.data['message'];
            }).finally(function() {
                $scope.pendingSMS = false;
            });
    };         
})

当SMS消息启动时,控制器设置pendingSMS标志以禁用发送按钮。服务完成后,将重置标志并重新启用该按钮。