根据angularjs中的模型值更改类

时间:2014-02-12 12:08:54

标签: javascript css angularjs angularjs-ng-repeat

items = {'apple', 'banana', 'lemon', 'cat', 'dog', 'monkey', 'tom', 'john', 'baby'}

HTML

 <div class="variable" ng-repeat="item in items">{{item}} </div>

我想做的是:

当项目为fruit时,

变量为apple, banana, lemon

当项目为animal时,

变量为cat, dog, monkey

当项目为human

时,

变量为tom, john, baby 水果,动物,人类是css类

请帮忙,谢谢

4 个答案:

答案 0 :(得分:1)

控制器

$scope.fruit = ['apple', 'banana', 'lemon'];
$scope.animal = ['cat', 'dog', 'monkey'];
$scope.human = ['tom', 'john', 'baby'];

$scope.items = $scope.fruit.concat($scope.animal).concat($scope.human);

$scope.is = function(type, item) {
    return ($scope[type].indexOf(item) != -1);
}

模板

<div ng-class="{fruit: is('fruit',item), animal: is('animal',item), human: is('human',item)}" ng-repeat="item in items">{{item}} </div>

答案 1 :(得分:1)

替换不正确的数组格式的项目

items = {'apple', 'banana', 'lemon', 'cat', 'dog', 'monkey', 'tom', 'john', 'baby'}

items = ['apple', 'banana', 'lemon', 'cat', 'dog', 'monkey', 'tom', 'john', 'baby']

使用ng-class是一种很好的方法。

标记:

<div ng-repeat="item it items" ng-class="defineClass(item)">{{item}}</div>

控制器:

$scope.items = ['apple', 'banana', 'lemon', 'cat', 'dog', 'monkey', 'tom', 'john', 'baby'];

$scope.defineClass = function(item) {
    switch (item) {
        case 'apple':
        case 'banana':
        case 'lemon':
            return 'fruit'; 
            break;
        case 'cat':
        case 'dog':
        case 'monkey':
            return 'animal'; 
            break;
        case 'tom':
        case 'john':
        case 'baby':
            return 'human'; 
            break;
    }
}

答案 2 :(得分:1)

最具扩展性的方法是使用不同的数据结构。例如:

var items = [
    {name: 'apple', type: 'fruit'},    
    {name: 'bannana', type: 'fruit'},
    {name: 'lemon', type: 'fruit'},
    {name: 'cat', type: 'animal'},
    {name: 'dog', type: 'animal'},
    {name: 'monkey', type: 'animal'},
    {name: 'tom', type: 'human'},
    {name: 'john', type: 'human'},
    {name: 'baby', type: 'human'}
];

是的,它更加冗长,但它带来了便利。如果明天您添加新项目,则根本不需要触摸模板或更改控制器代码以支持它。它将自动获得正确的类名。

<div class="{{item.type}}" ng-repeat="item in items">{{item.name}}</div>

演示:http://plnkr.co/edit/nrlSChOkp0rC7KRPI3FO?p=preview

答案 3 :(得分:0)

使用ng-class。

<div ng-class="{'classname':variable}" ng-repeat="item in items">{{item}} </div>

例如

<div ng-class="{'human':item == 'tom'}" ng-repeat="item in items">{{item}} </div>