2016-11-18 73 views
0

我有一個角度的應用程序,基本上有一個指令,顯示內容取決於用戶的類型,以防您的帳戶類型是免費的,你是一個嚮導模式給你一些促銷信息購買,但如果您的accounType不是免費或專業的,它可以啓動ng-click事件並顯示您的授權可以看到的模式。ng-click事件與承諾

但有一個問題,即時通訊,我相信,因爲我需要作出承諾,以獲得當前accounType的用戶,並提供正確的信息有一種類型的延遲,2模型是開火了。我認爲是因爲evt.stopProgation ...在一個承諾之內,而不是顯示一個模式。

這裏是我的代碼: 指令:

angular.module('app') 
    .directive('premiumContent', 
     [ 
      '$http', '$q','UserService','$uibModal','$rootScope','WizardService', 
      premium 
     ]); 


function premium($http, $q, UserService, $uibModal, $rootScope,WizardService) { 
    return { 
     restrict: 'A', 
     priority: -1, 
     link: function($scope, element, attrs, controller) { 
      element.on('click', function(evt){ 

       var clean = attrs.ngClick.substring(0, attrs.ngClick.indexOf('(')); 
       var controllerName = clean.substring(0, clean.indexOf('.')); 
       var clickTarget = clean.substring(clean.indexOf('.'),clean.length).replace('.',''); 


       if(attrs.counter == "false"){ 
        WizardService.isBlock = false; 
       }else{ 
        WizardService.isBlock = true; 
       } 

       UserService.getAuthenticatedUser() 
        .then(function (response) { 
         response = response.data; 
         debugger; 


         var accountType = response.user.account_type_id; 
         var user = response.user; 
         var users = $scope.$eval(attrs.to); 



         //check if is passing more than one user (array/object) 
         if(typeof users === 'object'){ 
          if(users.indexOf(accountType) !== -1){ 

           //assign a user to hide 
           users = users[users.indexOf(accountType)]; 
          } 
         } 

         if(users !== accountType) { 
          evt.preventDefault() 
          evt.stopImmediatePropagation(); 

           $uibModal.open({ 
            animation: true, 
            backdrop: 'static', 
            keyboard: false, 
            templateUrl: 'template/sidebar/wizard', 
            size: 'lg', 
            controller: 'WizardController', 
            controllerAs: 'wizardCtrl', 
            resolve: { 
             user: function() { 
              return user 
             }, 
             modalName: function() { 

              return $scope[controllerName][clickTarget]; 
             } 

            } 

           }); 



         } 

        }); 





      }); 
     } 
    }; 
} 

HTML:

<a premium-content to="[5]" counter="false" ng-click="sidebarCtrl.openProModal();">Senstive data</a> 

回答

0

$ uibModal的。開方法返回一個具有屬性調用的結果是一個承諾一個模式實例。要實現這個你的代碼應該看起來像這樣:

var modalInstance = $uibModal.open({ 
    animation: true, 
    backdrop: 'static', 
    keyboard: false, 
    templateUrl: 'template/sidebar/wizard', 
    size: 'lg', 
    controller: 'WizardController', 
    controllerAs: 'wizardCtrl', 
    resolve: { 
     user: function() { 
       return user 
       }, 
     modalName: function() { 
       return $scope[controllerName][clickTarget]; 
       } 
    } 
}); 

modalInstance.result.then(function() { 
    // do something here 
}); 
+0

我不太明白我在modalInstance.result中放置了什麼,你能解釋一下嗎? –

+0

您可以從模態中傳回一個值(也許是accounType?),並在這裏處理它,或者在模態關閉後您想要執行的任何代碼。 – jbrown