2017-02-16 16 views
1

Привет У меня есть кнопка, которая должна быть включена или отключена в зависимости от состояния. Когда нужно отключить, мне нужно показать сообщение. Но Javascript срабатывает много раз, поэтому сообщение показывает несколько раз, когда ему нужно показывать только один раз.Как предотвратить Javascript, который будет запущен несколько раз

Ниже разметки, которая вызывает функцию Javascript: -

<button type="submit" class="btn btn-save nm" ng-click="controller.saveOpportunity()" ng-disabled="!(controller.canDealBeClosedByFeeAllocationStatus() && controller.isEnabled('SaveOpportunity'))"> 
       <svg><use xlink:href="../Content/images/c/svg-defs.svg#circle-check"></use></svg> 
       Save 
      </button> 

Ниже Javascript Функция: -

canDealBeClosedByFeeAllocationStatus:()-> 
    if this.isReibDeal() && this.data.OpportunitySalesStageIsClose() == true 
     if this.data.FeeAllocationComplete == false 
     ShowMessage('warning', 'Fee Allocation needs to be complete') 
     return this.data.FeeAllocationComplete 
    else 
     return true 

Что такое решение этой проблемы?

ответ

0

USE нг-инвалидов

<button ng-disabled="IsDisabled" type="submit" class="btn btn-save nm" ng-click="controller.saveOpportunity()" ng-disabled="!(controller.canDealBeClosedByFeeAllocationStatus() && controller.isEnabled('SaveOpportunity'))"> 
       <svg><use xlink:href="../Content/images/c/svg-defs.svg#circle-check"></use></svg> 
       Save 
      </button> 

в контроллере

$scope.isDisabled=false; 

В функции Javascript набор $scope.IsDisabled=true;

Когда функция выполняется один раз установить $scope.IsDisabled=true

0

У вас не должно быть таких больших функций, проверяющих, что что-то отключено или нет, поскольку ng-disabled может проверять этот метод несколько раз.

нг-инвалиды могут быть вызваны, например, даже если вы используете нг нажмите на что-то, не связанное с нг-инвалидами метода see console in this example

var app = angular.module('plunker', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 
    $scope.testClick = function(){ 
 
    console.log("click which does not affect disabled flag"); 
 
    }; 
 
$scope.isDisabled=function(){ 
 
    console.log("disabled check function triggered"); 
 
    return true 
 
    
 
}; 
 
});
<!DOCTYPE html> 
 
<html ng-app="plunker"> 
 

 
    <head> 
 
    <meta charset="utf-8" /> 
 
    <title>AngularJS Plunker</title> 
 
    <script>document.write('<base href="' + document.location + '" />');</script> 
 
    <link rel="stylesheet" href="style.css" /> 
 
    <script data-require="[email protected]" src="https://code.angularjs.org/1.4.12/angular.js" data-semver="1.4.9"></script> 
 
    <script src="app.js"></script> 
 
    </head> 
 

 
    <body ng-controller="MainCtrl"> 
 
    <p>Hello {{name}}!</p> 
 
    <div> 
 
     <button ng-click="testClick()">Test</button> 
 
     <button ng-disabled="isDisabled()">Test</button> 
 
     Test {{message}} 
 
    </div> 
 
    
 
    </body> 
 

 
</html>

Так лучше подход, чтобы иметь ng-disable слушать переменную флага, такую ​​как isDealBeClosedByFee, которую вы можете обновить либо по пути, либо при инициализации контроллера.

 Смежные вопросы

  • Нет связанных вопросов^_^