AngularJS和UI-Bootstrap标签,使用ng-class修改标签
AngularJS and UI-Bootstrap Tabs, using ng-class to modify tab
我正在与 AngularJS 和 UI-Bootstrap 一起处理一个带有 ui-tabs 的项目。
大致布局是这样的:
<uib-tabset>
<uib-tab ng-repeat="tab in tabs" heading="{{tab.TAB_NAME}} : {{tab.Questions|sumByKey:'count'}} of {{tab.Questions.length}}" active="tab.active" disable="tab.disabled">
<!-- Repeated Content -->
</uib-tab>
</uib-tabset>
sumByKey:'count' 是一个过滤器,用于计算重复选项卡对象中 'count' 字段的总和。这会跟踪已回答的问题,tab.Questions.length 会计算选项卡中重复的问题数。
我可以在选项卡名称中同时显示这两个选项卡名称,就像我在这里所做的那样,这很有效,因此在每个选项卡中,选项卡名称是名称:已回答的问题总数,即:'Parking: 1 of 5' .
我想做的是使用 ng-class 在这些数字相等时向选项卡添加 'completed' class,以及该选项卡中的所有问题已回复
我可以在选项卡中添加一个 class='complete',这很有效,但是尝试使用 ng-class 根本不起作用,不是甚至 ng-class="complete".
有办法吗? ng-class 可以与 uib-tabs 一起使用吗?是否有其他机制来评估表达式并修改选项卡上的 class?
恐怕你不能直接在ui-tab
上使用ng-class
。这里的问题是 ui-tab
的内容(和属性)被包含在 this 中。它有自己的 ng-class
正在破坏你的。这是我设法 find/use.
的唯一解决方法
像这样将 class 与 ng-class 一起使用:
<uib-tabset>
<uib-tab class="{{complete}}" ng-repeat="tab in tabs" heading="{{tab.TAB_NAME}} : {{tab.Questions|sumByKey:'count'}} of {{tab.Questions.length}}" active="tab.active" disable="tab.disabled">
<!-- Repeated Content -->
</uib-tab>
</uib-tabset>
但是请注意,complete
必须是字符串才能正常工作。如果它是一个布尔值,那么你的运气可能会更好:
<uib-tabset>
<uib-tab class="{{complete ? 'complete':''}}" ng-repeat="tab in tabs" heading="{{tab.TAB_NAME}} : {{tab.Questions|sumByKey:'count'}} of {{tab.Questions.length}}" active="tab.active" disable="tab.disabled">
<!-- Repeated Content -->
</uib-tab>
</uib-tabset>
如果您需要放置多个 classes,那么我将创建一个函数,将 returns classes 放入一个字符串中:
<uib-tabset>
<uib-tab class="{{isCompleted}}" ng-repeat="tab in tabs" heading="{{tab.TAB_NAME}} : {{tab.Questions|sumByKey:'count'}} of {{tab.Questions.length}}" active="tab.active" disable="tab.disabled">
<!-- Repeated Content -->
</uib-tab>
</uib-tabset>
在控制器中:
$scope.isCompleted = function () {
// some logic
return 'complete done';
}
希望对你有所帮助。
非常感谢 jsonmurphy!这让我头疼了一段时间,这就像一个魅力!
最终语法是这样的:
class="{{ (tab.Questions|sumByKey:'count') == (tab.Questions.length) ? 'completed' : ''}}"
然后将这些添加到 CSS:
li.completed a.ng-binding{
background-color: silver;
}
li.active.completed a.ng-binding{
background-color: silver;
}
当该选项卡中的所有问题都已回答时,这会将整个选项卡的选项卡背景设置为银色。 li.completed 和 li.active.completed 涵盖当前选择选项卡 (.active) 时以及选项卡完成但不是当前选项卡时。它们本可以写成一条规则,但为了清楚起见,我将它们分开。
如上所述,我们不能为此使用 ng-class,但是 uib-tab 提供了 类 属性,您可以为此使用。
As indicated in the documentation.
https://angular-ui.github.io/bootstrap/#!#tabs
下面是一个工作示例,显示 类 可以动态更改。
var app = angular.module('example', ['ui.bootstrap']);
app.controller('controller', ['$scope', function($scope) {
var classOne = 'bg-success';
var classTwo = 'bg-danger';
$scope.swapClasses = function() {
var tempHolder = classOne;
classOne = classTwo;
classTwo = tempHolder;
}
$scope.getClassOne = function() {
return classOne;
}
$scope.getClassTwo = function() {
return classTwo;
}
}
]);
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/2.1.3/ui-bootstrap-tpls.js"></script>
<body ng-app="example">
<div ng-controller="controller">
<div>
<input type="checkbox" ng-click="swapClasses()" /> Swap Classes!
</div>
<br>
<uib-tabset>
<uib-tab heading='Tab One' classes="{{getClassOne()}}">
<div class="tab-container">
I am Tab One
</div>
</uib-tab>
<uib-tab heading='Tab Two' classes="{{getClassTwo()}}">
<div class="tab-container">
I am Tab Two
</div>
</uib-tab>
</uib-tabset>
</div>
</body>
我正在与 AngularJS 和 UI-Bootstrap 一起处理一个带有 ui-tabs 的项目。
大致布局是这样的:
<uib-tabset>
<uib-tab ng-repeat="tab in tabs" heading="{{tab.TAB_NAME}} : {{tab.Questions|sumByKey:'count'}} of {{tab.Questions.length}}" active="tab.active" disable="tab.disabled">
<!-- Repeated Content -->
</uib-tab>
</uib-tabset>
sumByKey:'count' 是一个过滤器,用于计算重复选项卡对象中 'count' 字段的总和。这会跟踪已回答的问题,tab.Questions.length 会计算选项卡中重复的问题数。
我可以在选项卡名称中同时显示这两个选项卡名称,就像我在这里所做的那样,这很有效,因此在每个选项卡中,选项卡名称是名称:已回答的问题总数,即:'Parking: 1 of 5' .
我想做的是使用 ng-class 在这些数字相等时向选项卡添加 'completed' class,以及该选项卡中的所有问题已回复
我可以在选项卡中添加一个 class='complete',这很有效,但是尝试使用 ng-class 根本不起作用,不是甚至 ng-class="complete".
有办法吗? ng-class 可以与 uib-tabs 一起使用吗?是否有其他机制来评估表达式并修改选项卡上的 class?
恐怕你不能直接在ui-tab
上使用ng-class
。这里的问题是 ui-tab
的内容(和属性)被包含在 this 中。它有自己的 ng-class
正在破坏你的。这是我设法 find/use.
像这样将 class 与 ng-class 一起使用:
<uib-tabset>
<uib-tab class="{{complete}}" ng-repeat="tab in tabs" heading="{{tab.TAB_NAME}} : {{tab.Questions|sumByKey:'count'}} of {{tab.Questions.length}}" active="tab.active" disable="tab.disabled">
<!-- Repeated Content -->
</uib-tab>
</uib-tabset>
但是请注意,complete
必须是字符串才能正常工作。如果它是一个布尔值,那么你的运气可能会更好:
<uib-tabset>
<uib-tab class="{{complete ? 'complete':''}}" ng-repeat="tab in tabs" heading="{{tab.TAB_NAME}} : {{tab.Questions|sumByKey:'count'}} of {{tab.Questions.length}}" active="tab.active" disable="tab.disabled">
<!-- Repeated Content -->
</uib-tab>
</uib-tabset>
如果您需要放置多个 classes,那么我将创建一个函数,将 returns classes 放入一个字符串中:
<uib-tabset>
<uib-tab class="{{isCompleted}}" ng-repeat="tab in tabs" heading="{{tab.TAB_NAME}} : {{tab.Questions|sumByKey:'count'}} of {{tab.Questions.length}}" active="tab.active" disable="tab.disabled">
<!-- Repeated Content -->
</uib-tab>
</uib-tabset>
在控制器中:
$scope.isCompleted = function () {
// some logic
return 'complete done';
}
希望对你有所帮助。
非常感谢 jsonmurphy!这让我头疼了一段时间,这就像一个魅力!
最终语法是这样的:
class="{{ (tab.Questions|sumByKey:'count') == (tab.Questions.length) ? 'completed' : ''}}"
然后将这些添加到 CSS:
li.completed a.ng-binding{
background-color: silver;
}
li.active.completed a.ng-binding{
background-color: silver;
}
当该选项卡中的所有问题都已回答时,这会将整个选项卡的选项卡背景设置为银色。 li.completed 和 li.active.completed 涵盖当前选择选项卡 (.active) 时以及选项卡完成但不是当前选项卡时。它们本可以写成一条规则,但为了清楚起见,我将它们分开。
如上所述,我们不能为此使用 ng-class,但是 uib-tab 提供了 类 属性,您可以为此使用。
As indicated in the documentation. https://angular-ui.github.io/bootstrap/#!#tabs
下面是一个工作示例,显示 类 可以动态更改。
var app = angular.module('example', ['ui.bootstrap']);
app.controller('controller', ['$scope', function($scope) {
var classOne = 'bg-success';
var classTwo = 'bg-danger';
$scope.swapClasses = function() {
var tempHolder = classOne;
classOne = classTwo;
classTwo = tempHolder;
}
$scope.getClassOne = function() {
return classOne;
}
$scope.getClassTwo = function() {
return classTwo;
}
}
]);
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/2.1.3/ui-bootstrap-tpls.js"></script>
<body ng-app="example">
<div ng-controller="controller">
<div>
<input type="checkbox" ng-click="swapClasses()" /> Swap Classes!
</div>
<br>
<uib-tabset>
<uib-tab heading='Tab One' classes="{{getClassOne()}}">
<div class="tab-container">
I am Tab One
</div>
</uib-tab>
<uib-tab heading='Tab Two' classes="{{getClassTwo()}}">
<div class="tab-container">
I am Tab Two
</div>
</uib-tab>
</uib-tabset>
</div>
</body>