2016-11-04 62 views
1

have一个控制器中的三个按钮,具有ng键功能。当这个元素已经被点击时,我如何禁用点击? 这里是例子:禁用ng单击此元素

<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这就是为什么你倒下了它?我尝试在不处理DOM元素的情况下提出替代方案。这是行之有效的 – Weedoze

+0

它是'n​​g-disabled'(不是ng-disable),这就是你需要的全部 – Targaryen

1

只需添加ND-禁用指令你的按钮:

<button ng-click="clicked=true;DoSomethingElse()" ng-disabled-"clicked">xyz</button> 

一个独立于JavaScript的解决方案。这种方式您不需要关心在您的控制器中设置标志。只需在您的控制器初始化时添加clicked=false

+0

在这种情况下,以后不再点击按钮。 'clicked'变量需要以角度存储。 – Targaryen

+1

是的'clicked = false'初始化将在控制器中处理它。 – Rambler

1

更好的方法是编写一个自定义指令,使用jqLit​​e或jQuery(在加载jQuery库的情况下)更新DOM元素。检查下面的代码片段。

DOM不应该在控制器中更新,因为它禁止在指令中发生单元测试和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问javascript不是JQuery – Weedoze

+1

@Weedoze,我的代码片段不使用jQuery。 AngularJS自带jQuery内置jQuery的裁剪版本,使用jqLit​​e的API我已经在按钮上映射了一个click事件来禁用它们 –