AngularJS ng-отключено не работает с элементами списка
я столкнулся с проблемой отключения элемента в списке.
<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>
Он также не работает. Кто-нибудь может что-нибудь предложить?
4 ответов
Я предполагаю, что это какое-то окно поиска.
ngDisabled
действительно используется для интерактивных элементов, а не элементов списка.
можно использовать ng-if
или ng-hide
удалить эти элементы из списка:
<li ng-if="!condition" ng-click="changeStatus()">item</li>
<li ng-hide="condition" ng-click="changeStatus()">item</li>
можно использовать ngClass
чтобы применить определенный класс при отключении, чтобы он выглядел отключенным:
<li ng-class="{'disabled':condition}" ng-click="changeStatus()">item</li>
если вы хотите, чтобы элемент был виден, но не нажмите кнопку, возможно, вам придется сделать хак, как повторно открыть окно поиска, если элемент отключен или тонет событие.
Я думаю, вы хотите отключить onclick, если someCondition истинно. Это должно сработать:
<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>
этот код может помочь u..
<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>