Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 禁用ng单击此元素_Javascript_Angularjs - Fatal编程技术网

Javascript 禁用ng单击此元素

Javascript 禁用ng单击此元素,javascript,angularjs,Javascript,Angularjs,I一个控制器中有三个按钮,具有ng click功能。当已单击此元素时,如何禁用单击? 下面是一个例子: <div ng-app="myApp"> <div ng-controller="GreetingController"> <button ng-click="!IsClickEnable||DoSomethingElse()">xyz</button> <button ng-click="!IsClickEnable|

I一个控制器中有三个按钮,具有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;
  };

}]);

xyz
xyz
xyz
var myApp=angular.module('myApp',[]);
myApp.controller('GreetingController',['$scope',函数($scope){
$scope.IsClickEnable=true;
$scope.DoSomethingElse=函数(){
警报('单击')
$scope.IsClickEnable=false;
};
}]);
var myApp=angular.module('myApp',[]);
myApp.controller('GreetingController',['$scope',函数($scope){
$scope.DoSomethingElse=函数(事件){
event.target.disabled=true;
};
}]);

xyz
xyz
xyz
var myApp=angular.module('myApp',[]);
myApp.controller('GreetingController',['$scope',',
职能($范围){
$scope.buttons=[{
“名称”:“xyz”,
“禁用”:错误
}, {
“名称”:“xyz”,
“禁用”:错误
}, {
“名称”:“xyz”,
“禁用”:错误
}];
$scope.DoSomethingElse=函数(b){
log(“做某事”);
b、 禁用=真;
}
}
]);

{{button.name}

只需将nd disable指令添加到按钮:

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

一个独立于javascript的解决方案。这样,您就不必关心在控制器中设置标志。只需在控制器的init处添加
clicked=false

更好的方法是编写一个自定义指令,使用jqLite或jQuery更新DOM元素(以防加载jQuery库)。检查下面的代码段

不应该在控制器中更新DOM,因为它禁止单元测试,并且应该在指令中进行DOM操作,以证明在这种情况下,按钮是在视图本身中创建的,而不是使用控制器中的数据生成的

angular
.module('演示',[]))
.controller('GreetingController',GreetingController)
.指令(“disableOnClick”,disableOnClick);
GreetingController.$inject=['$scope'];
函数迎宾控制器($scope){
$scope.doSomethingElse=函数(){
log('do other');
}
}
函数disableOnClick(){
var指令={
限制:“A”,
链接:linkFunc
}
返回指令;
函数linkFunc(范围、元素、属性、ngModelCtrl){
元素上('click',函数(事件){
event.target.disabled=true;
});
}
}

xyz
xyz
xyz

您不想在单击每个按钮后禁用它吗?@NicolasGarnil yes。现在是禁用所有按钮。您只需使用
ng disabled
这太多的代码,无法仅禁用一个按钮。@Targaryen这就是您否决该按钮的原因?我试图提出一个不处理DOM元素的替代方案。这是working@Targaryen:正如您自己在Rambler的回答中所述,属性需要存储在控制器中。Weedoze就是这样做的——每个按钮一个。别做那个家伙。@Weedoze:array和
ng repeat
有点过分了。摆脱它们。@AlvinThompson我用它在点击一个按钮后只禁用一个按钮。如果不使用数组和DOM事件或元素,该如何操作?在这种情况下,按钮将无法在以后再次单击。
clicked
变量需要存储在angular中。是的,
clicked=false
初始化将在controller.OP中处理它,而不是JavascriptJQuery@Weedoze,我的代码段不使用jQuery。AngularJS内置了一个简化版的jQuery,称为jqLite,使用jqLite的API,我在按钮上映射了一个单击事件来禁用它们