【发布时间】:2013-09-04 14:02:18
【问题描述】:
我想在表格中实现一个功能,用户可以通过单击它来设置单元格的值。 可以说有 3-4 个状态,还附加了一个 ng-model。
我在 angularjs 中寻找切换按钮,但它们只是开/关类型。
简而言之;单击按钮会将值设置为:Active、Inactive、Excluded 寻找具有多种状态的解决方案。 非常感谢您提供任何帮助。
【问题讨论】:
标签: javascript angularjs
我想在表格中实现一个功能,用户可以通过单击它来设置单元格的值。 可以说有 3-4 个状态,还附加了一个 ng-model。
我在 angularjs 中寻找切换按钮,但它们只是开/关类型。
简而言之;单击按钮会将值设置为:Active、Inactive、Excluded 寻找具有多种状态的解决方案。 非常感谢您提供任何帮助。
【问题讨论】:
标签: javascript angularjs
检查以下工作示例:
http://jsfiddle.net/vishalvasani/ZavXw/9/
和控制器代码
function MyCtrl($scope) {
$scope.btnarr=0;
$scope.btnTxt=["Active","Inactive","Excluded"]
$scope.change=function(){
switch($scope.btnarr)
{
case 0:
$scope.btnarr=1;
break;
case 1:
$scope.btnarr=2
break;
case 2:
$scope.btnarr=0;
break;
}
}
}
或
控制器的短版本
function MyCtrl($scope) {
$scope.btnarr=0;
$scope.btnTxt=["Active","Inactive","Excluded"]
$scope.change=function(){
$scope.btnarr = ($scope.btnarr + 1) % $scope.btnTxt.length;
}
}
和 HTML
<div ng-controller="MyCtrl">
<button ng-modle="btnarr" ng-Click="change()">{{btnTxt[btnarr]}}</button>
</div>
【讨论】:
没什么大不了的。
当我在 Angular 中制作菜单时,在每个项目上,我都会有一个“选择”功能,然后从列表中选择该特定对象...
制作可迭代按钮更加流畅:
var i = 0;
$scope.states[
{ text : "Active" },
{ text : "Inactive" },
{ text : "Excluded" }
];
$scope.currentState = $scope.states[i];
$scope.cycleState = function () {
i = (i + 1) % $scope.states.length;
$scope.currentState = $scope.states[i];
// notify services here, et cetera
}
<button ng-click="cycleState">{{currentState.text}}</button>
实际的状态数组甚至不需要成为 $scope 的一部分,如果这是您使用这些对象的唯一地方 - 您需要在 @987654323 上拥有的唯一对象@ 将是 currentState,这是您在调用 cycleState 方法时设置的。
【讨论】:
这里有两种可能性:从列表中选择状态或通过单击按钮本身循环。
JS 代码如下所示:
angular.module('test').directive('toggleValues',function(){
return {
restrict: 'E',
replace: true,
template: '<div>Set Status:<div ng-repeat="value in values" class="status" ng-click="changeTo($index)">{{value}}</div><span ng-click="next()">Current Status (click to cycle): {{values[selectedValue]}}</span></div>',
controller: ['$scope', '$element', function ($scope, $element) {
$scope.values = ["Active", "Inactive", "Pending"];
$scope.changeTo = function (index) {
$scope.selectedValue = (index < $scope.values.length) ? index : 0;
};
$scope.next = function () {
$scope.selectedValue = ($scope.selectedValue + 1) % $scope.values.length;
// the modulo is stolen from Norguard (http://stackoverflow.com/a/18592722/2452446) - brilliant idea
};
$scope.selectedValue = 0;
}]
};
});
HTML:
<div ng-app="test">
<toggle-values></toggle-values>
</div>
【讨论】:
i += 1; i %= length; 从微操作的角度来看,没有真正的区别。但它看起来真的很干净。