AngularJS ng-disabled 无法使用列表项
AngularJS ng-disabled not working with list items
我在禁用列表中的项目时遇到问题。
<div id="searchdropdown">
<ul>
<li>list1</li>
<li ng-disabled="someCondition" ng-click="changeStatus()">list2</li>
<li>list3</li>
</ul>
</div>
不适用于 ng-disabled
。
我也试过:
<li ng-class="disabled:someCondition" click="changeStatus()"> list2
</ li>
同样不行。任何人都可以提出建议吗?
我假设它是某种搜索框。
ngDisabled
真正用于交互元素而不是列表项。
您可以使用 ng-if
或 ng-hide
从列表中完全删除这些项目:
<li ng-if="!condition" ng-click="changeStatus()">item</li>
<li ng-hide="condition" ng-click="changeStatus()">item</li>
您可以使用 ngClass
在禁用时应用特定 class 以使其显示为禁用:
<li ng-class="{'disabled':condition}" ng-click="changeStatus()">item</li>
如果您希望某个项目可见但不可点击,您可能需要进行一些 hack,例如在该项目被禁用或下沉事件时重新打开搜索框。
这段代码可以帮助你..
<head>
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
</head>
<body>
<div ng-app="" ng-init="mySwitch=true">
<p>
<button ng-disabled="mySwitch">Click Me!</button>
</p>
<p>
<input type="checkbox" ng-model="mySwitch"/>Button
</p>
<p>
{{ mySwitch }}
</p>
</div>
</body>
</html>
我猜您想在 someCondition 为真时禁用 onclick。这应该有效:
<ul>
<li>list1</li>
<li ng-click="someCondition || changeStatus()">list2</li>
<li >list3</li>
</ul>
因此,如果 someCondition 为真,则不会执行 changeStatus(),因为 OR 语句在前一条语句已经为真时不会执行下一条语句。
或者,您可以使用以下 CSS 属性 来禁用点击事件:
li[disabled] {
pointer-events: none;
}
也就是说,如果您定位的浏览器支持此功能。这是一个列表:
http://caniuse.com/#feat=pointer-events
演示:
angular.module('MyApp', [])
.controller('MyCtrl', function($scope) {
$scope.toggleActiveState = function(itemIndex) {
$scope.items[itemIndex].isActive = !$scope.items[itemIndex].isActive;
};
$scope.items = [
{label: 'One'},
{label: 'Two'},
{label: 'Three', isDisabled: true},
{label: 'Four'}
];
});
ul li.item {
display: block;
cursor: pointer;
background: green;
padding: 5px 10px;
margin-bottom: 5px;
}
ul li.item.active {
background: red;
}
ul li.item[disabled] {
opacity: .4;
cursor: default;
pointer-events: none;
}
<html ng-app="MyApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<body ng-controller="MyCtrl">
<h1>My list:</h1>
<ul>
<li class="item" ng-repeat="item in items" ng-click="toggleActiveState($index)" ng-disabled="item.isDisabled" ng-class="{active: item.isActive}">{{item.label}}</li>
</ul>
</body>
</html>
我在禁用列表中的项目时遇到问题。
<div id="searchdropdown">
<ul>
<li>list1</li>
<li ng-disabled="someCondition" ng-click="changeStatus()">list2</li>
<li>list3</li>
</ul>
</div>
不适用于 ng-disabled
。
我也试过:
<li ng-class="disabled:someCondition" click="changeStatus()"> list2
</ li>
同样不行。任何人都可以提出建议吗?
我假设它是某种搜索框。
ngDisabled
真正用于交互元素而不是列表项。
您可以使用 ng-if
或 ng-hide
从列表中完全删除这些项目:
<li ng-if="!condition" ng-click="changeStatus()">item</li>
<li ng-hide="condition" ng-click="changeStatus()">item</li>
您可以使用 ngClass
在禁用时应用特定 class 以使其显示为禁用:
<li ng-class="{'disabled':condition}" ng-click="changeStatus()">item</li>
如果您希望某个项目可见但不可点击,您可能需要进行一些 hack,例如在该项目被禁用或下沉事件时重新打开搜索框。
这段代码可以帮助你..
<head>
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
</head>
<body>
<div ng-app="" ng-init="mySwitch=true">
<p>
<button ng-disabled="mySwitch">Click Me!</button>
</p>
<p>
<input type="checkbox" ng-model="mySwitch"/>Button
</p>
<p>
{{ mySwitch }}
</p>
</div>
</body>
</html>
我猜您想在 someCondition 为真时禁用 onclick。这应该有效:
<ul>
<li>list1</li>
<li ng-click="someCondition || changeStatus()">list2</li>
<li >list3</li>
</ul>
因此,如果 someCondition 为真,则不会执行 changeStatus(),因为 OR 语句在前一条语句已经为真时不会执行下一条语句。
或者,您可以使用以下 CSS 属性 来禁用点击事件:
li[disabled] {
pointer-events: none;
}
也就是说,如果您定位的浏览器支持此功能。这是一个列表: http://caniuse.com/#feat=pointer-events
演示:
angular.module('MyApp', [])
.controller('MyCtrl', function($scope) {
$scope.toggleActiveState = function(itemIndex) {
$scope.items[itemIndex].isActive = !$scope.items[itemIndex].isActive;
};
$scope.items = [
{label: 'One'},
{label: 'Two'},
{label: 'Three', isDisabled: true},
{label: 'Four'}
];
});
ul li.item {
display: block;
cursor: pointer;
background: green;
padding: 5px 10px;
margin-bottom: 5px;
}
ul li.item.active {
background: red;
}
ul li.item[disabled] {
opacity: .4;
cursor: default;
pointer-events: none;
}
<html ng-app="MyApp">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<body ng-controller="MyCtrl">
<h1>My list:</h1>
<ul>
<li class="item" ng-repeat="item in items" ng-click="toggleActiveState($index)" ng-disabled="item.isDisabled" ng-class="{active: item.isActive}">{{item.label}}</li>
</ul>
</body>
</html>