我正在尝试在Angular中创建一个切换按钮。到目前为止我所拥有的是:
<div class="btn-group">
<a class="btn btn-primary pull-right" ng-click="toggleArchive(true)" ng-show="!patient.archived">Archive patient</a>
<a class="btn btn-danger pull-right" ng-click="toggleArchive(false)" ng-show="patient.archived">Unarchive patient</a>
.... some other buttons ....
</div>
基本上我通过两个按钮切换,并在它们之间切换。这会导致问题,因为ng-hide
只是在按钮隐藏时添加display:none
样式,这会导致样式问题。理想情况下,我希望有一个按钮,它的文本,类和函数调用根据patient.archived
的状态而改变。
实现这一目标的方法是什么?
答案 0 :(得分:50)
您应该使用ng-class
在类之间切换,并使用常规Angular expression绑定文本。此外,如果您的函数toggleArchive
仅切换值,则可以将其删除并从Angular表达式切换值:
<a class="btn pull-right"
ng-class="{true: 'btn-primary', false: 'btn-danger'}[!patient.archived]"
ng-click="patient.archived = !patient.archived">
{{!patient.archived && 'Archive' || 'Unarchive'}} patient
</a>
答案 1 :(得分:1)
它可能对你有帮助。
<html>
<head>
<script src="js/angular.js"></script>
<script src="js/app.js"></script>
<link rel="stylesheet" href="css/bootstrap.css">
</head>
<body ng-app>
<div ng-controller="MyCtrl">
<button ng-click="toggle()">Toggle</button>
<p ng-show="visible">Hello World!</p>
</div>
</body>
</html>
function MyCtrl($scope) {
$scope.visible = true;
$scope.toggle = function () {
$scope.visible = !$scope.visible;
};
}
答案 2 :(得分:1)
对于任何其他疲惫的旅行者......
你可以简单地使用ng-if
。如果为false,则ng-if
完全从DOM中排除该元素,因此在不显示时不会出现样式问题。此外,根本不需要按钮组,您只需更改按钮的文本
这样的事情:
<button class="btn btn-primary pull-right" ng-click="toggleArchive(true)" ng-if="!patient.archived">Archive patient</button>
<button class="btn btn-danger pull-right" ng-click="toggleArchive(false)" ng-if="patient.archived">Unarchive patient</button>
答案 3 :(得分:0)
今年五月的帮助
destinationViewController
答案 4 :(得分:0)
这是我发现的最简单的答案。我没有尝试动画,因为我只是用它来快速设置。
<a ng-click="scopeVar=scopeVar!=true">toggle</a>
<div ng-show="scopeVar">show stuff</div>
scopeVar = scopeVar!= true undefined变为true。
答案 5 :(得分:0)
<input type="checkbox" class="toggle-button"
ng-model="patient.archived">
然后将复选框设置为按钮样式。
如果切换需要做更多的事情,请将以下内容添加到您的患者类别中:
class Patient {
constructor() {
this.archived = false;
}
...
get angularArchived() {
return this.archived;
}
set angularArchived(value) {
if (value !== this.archived)
toggleArchived(value);
}
this.archived = value;
}
}
然后使用
<input type="checkbox" class="toggle-button"
ng-model="patient.angularArchived">