2016-11-04 6 views
1

I have ng-click機能を持つ1つのコントローラに3つのボタンがあります。この要素が既にクリックされているときにクリックを無効にする方法はありますか?この要素のng-clickを無効にする

<div ng-app="myApp"> 
    <div ng-controller="GreetingController"> 
    <button ng-click="!IsClickEnable||DoSomethingElse()">xyz</button> 
    <button ng-click="!IsClickEnable||DoSomethingElse()">xyz</button> 
    <button ng-click="!IsClickEnable||DoSomethingElse()">xyz</button> 
    </div> 
</div> 

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

myApp.controller('GreetingController', ['$scope', function($scope) { 
    $scope.IsClickEnable = true; 
    $scope.DoSomethingElse = function() { 
    alert('click') 
    $scope.IsClickEnable = false; 
    }; 

}]); 
+0

あなたはそれをクリックした後、各ボタンを無効にするwan't? –

+0

@NicolasGarnilはい。これですべてのボタンが無効になります。 –

+1

あなたは 'ng-disabled'を使う必要があります – Targaryen

答えて

-1

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

 
myApp.controller('GreetingController', ['$scope', function($scope) { 
 
    $scope.DoSomethingElse = function(event) { 
 
    event.target.disabled = true; 
 
    }; 
 

 
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp"> 
 
    <div ng-controller="GreetingController"> 
 
    <button ng-click="DoSomethingElse($event)">xyz</button> 
 
    <button ng-click="DoSomethingElse($event)">xyz</button> 
 
    <button ng-click="DoSomethingElse($event)">xyz</button> 
 
    </div> 
 
</div>

2

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

 
myApp.controller('GreetingController', ['$scope', 
 
    function($scope) { 
 

 
    $scope.buttons = [{ 
 
     "name": "xyz", 
 
     "disabled": false 
 
    }, { 
 
     "name": "xyz", 
 
     "disabled": false 
 
    }, { 
 
     "name": "xyz", 
 
     "disabled": false 
 
    }]; 
 

 
    $scope.DoSomethingElse = function(b) { 
 
     console.log("Do something"); 
 
     b.disabled = true; 
 
    } 
 
    } 
 
]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp"> 
 
    <div ng-controller="GreetingController"> 
 
    <button ng-repeat="button in buttons" 
 
      ng-disabled="button.disabled" 
 
      ng-click="DoSomethingElse(button)"> 
 
     {{button.name}} 
 
    </button> 
 
    </div> 
 
</div>

+0

ボタンを無効にするにはあまりにも多くのコードです。 – Targaryen

+0

@Targaryenだからあなたはそれをdownvoteなぜですか?私はDOM要素を扱わずに代替案を提案しようとしています。これは動作しています – Weedoze

+0

これは 'ng-disabled'(ng-disableではありません)です。これはあなたが必要とするものです。 – Targaryen

1

はちょうどあなたのボタンにND-無効ディレクティブを追加します:

<button ng-click="clicked=true;DoSomethingElse()" ng-disabled-"clicked">xyz</button> 
ここでは一例であり、

javascriptに依存しないソリューションです。この方法でコントローラのフラグを設定する必要はありません。コントローラのinitにちょうどclicked=falseを追加してください。

+0

この場合、ボタンは後で再度クリックできません。 'クリックされた'変数は角度で格納される必要があります。 – Targaryen

+1

ええ、 'clicked = false'初期化がコントローラで処理されます。 – Rambler

1

これを行うより良い方法は、jqLit​​eまたはjQueryを使用してDOM要素を更新するカスタムディレクティブを作成することです(jQueryライブラリがロードされている場合)。以下のコードスニペットを確認してください。

ユニットテストやDOM操作が禁止されているため、このシナリオではボタンがビュー自体に作成され、コントローラ。

angular 
 
    .module('demo', []) 
 
    .controller('GreetingController', GreetingController) 
 
    .directive('disableOnClick', disableOnClick); 
 

 
GreetingController.$inject = ['$scope']; 
 

 
function GreetingController($scope) { 
 
    $scope.doSomethingElse = function() { 
 
    console.log('do something else'); 
 
    } 
 
} 
 

 
function disableOnClick() { 
 
    var directive = { 
 
    restrict: 'A', 
 
    link: linkFunc 
 
    } 
 

 
    return directive; 
 

 
    function linkFunc(scope, element, attrs, ngModelCtrl) { 
 
    element.on('click', function(event) { 
 
     event.target.disabled = true; 
 
    }); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0/angular.min.js"></script> 
 
<div ng-app="demo"> 
 
    <div ng-controller="GreetingController"> 
 
    <button disable-on-click ng-click="doSomethingElse()">xyz</button> 
 
    <button disable-on-click ng-click="doSomethingElse()">xyz</button> 
 
    <button disable-on-click ng-click="doSomethingElse()">xyz</button> 
 
    </div> 
 
</div>

+1

OPがJQueryではないJavascriptを要求しました – Weedoze

+1

@Weedoze、私のコードスニペットはjQueryを使用していません。 AngularJSには、jqLit​​eのAPIを使用して、jqLit​​eという名前のjQueryが組み込まれています。jqLit​​eのAPIを使用してボタンをクリックして無効にしました –

関連する問題