使用AngularJS选择时,在选项卡链接上更改类

时间:2013-09-16 09:22:36

标签: angularjs angularjs-scope

我有一些标签显示从JSON数据中提取的内容表。标签工作,我在表列上排序。到目前为止都很好。但是我想要实现两件事:

  1. 我想在页面加载时默认显示第一个选项卡面板。
  2. 我想在活动标签链接中添加一个“有效”类。
  3. 我可以在这个小提琴中看到我的代码:http://jsfiddle.net/9hZx5/5/,如下所示:

    HTML:

    <div ng-app="myApp">
        <div class="tabs">
            <a href="" title="" class="tab selected" rel="tab1" ng:click="selected=1">Purchases</a>
            <a href="" title="" class="tab" rel="tab2" ng:click="selected=2">Products on sale</a>
            <a href="" title="" class="tab" rel="tab3" ng:click="selected=3">Last 30 days sales</a>
        </div>
        <div id="tab1" class="tabContent selected" ng-controller="PurchasesCtrl" ng:show="selected == 1">
            <h2>Purchases:</h2>
            <table cellspacing="0">
                <tr class="first">
                    <th class="first">Date</th>
                    <th>Description</th>
                </tr>
                <tr ng-repeat="purchase in purchases.data" ng-class-odd="'odd'" ng-class-even="'even'" ng-class="{'last':$last}">
                    <td class="first">{{purchase.date}}</td>
                    <td>{{purchase.text}}</td>
                </tr>
            </table>
        </div>
    
    
        <div id="tab2" class="tabContent selected" ng-controller="SaleProductsCtrl" ng:show="selected == 2">
            <h2>Sale products:</h2>                         
            <table cellspacing="0">
                <tr class="first">
                    <th class="first">Date</th>
                    <th>Description</th>
                </tr>
                <tr ng-repeat="saleProduct in saleProducts.data" ng-class-odd="'odd'" ng-class-even="'even'" ng-class="{'last':$last}">
                    <td class="first">{{saleProduct.date}}</td>
                    <td>{{saleProduct.text}}</td>
                </tr>
            </table>
        </div>
    
    
        <div id="tab3" class="tabContent selected" ng-controller="Sale30DaysCtrl" ng:show="selected == 3">
            <h2>Sale 30 days:</h2>
            <table cellspacing="0">
                <tr class="first">
                    <th class="first">Date</th>
                    <th>Description</th>
                </tr>
                <tr ng-repeat="sale30Day in sale30Days.data" ng-class-odd="'odd'" ng-class-even="'even'" ng-class="{'last':$last}">
                    <td class="first">{{sale30Day.date}}</td>
                    <td>{{sale30Day.text}}</td>
                </tr>
            </table>
        </div>
    </div>
    

    JS:

    var myApp = angular.module("myApp",[]);
    
    myApp.factory("Purchases", function(){
        var Purchases = {};
        Purchases.data = [
            {
                date: "20/05/2012",
                text: "Lorem ipsum dolor sit amet ipsum dolor"
            },
            {
                date: "20/05/2012",
                text: "Lorem ipsum dolor sit amet ipsum dolor"
            },
            {
                date: "20/05/2012",
                text: "Lorem ipsum dolor sit amet ipsum dolor"
            }
        ];
        return Purchases;
    });
    
    function PurchasesCtrl($scope, Purchases){
        $scope.purchases = Purchases;   
    }
    
    
    
    
    myApp.factory("SaleProducts", function(){
        var SaleProducts = {};
        SaleProducts.data = [
            {
                date: "20/05/2012",
                text: "Lorem ipsum dolor sit amet ipsum dolor"
            },
            {
                date: "20/05/2012",
                text: "Lorem ipsum dolor sit amet ipsum dolor"
            }
        ];
        return SaleProducts;
    });
    
    function SaleProductsCtrl($scope, SaleProducts){
        $scope.saleProducts = SaleProducts;   
    }
    
    
    
    
    myApp.factory("Sale30Days", function(){
        var Sale30Days = {};
        Sale30Days.data = [
            {
                date: "20/05/2012",
                text: "Lorem ipsum dolor sit amet ipsum dolor"
            },
            {
                date: "20/05/2012",
                text: "Lorem ipsum dolor sit amet ipsum dolor"
            },
            {
                date: "20/05/2012",
                text: "Lorem ipsum dolor sit amet ipsum dolor"
            },
            {
                date: "20/05/2012",
                text: "Lorem ipsum dolor sit amet ipsum dolor"
            }
        ];
        return Sale30Days;
    });
    
    function Sale30DaysCtrl($scope, Sale30Days){
        $scope.sale30Days = Sale30Days;   
    }
    

    我不确定是否需要为标签链接定义一个控制器(尝试过它,它似乎完全破坏了标签!),或者我是否因为每个标签都有一个控制器而略微错误地解决了这个问题面板,我应该只有一个主控制器用于整个部分。

    任何帮助都会非常感激,因为我是Angular的新手,并试图找到自己的方式。

    谢谢大家......

1 个答案:

答案 0 :(得分:9)

<div class="tabs">
    <a href="" title="" class="tab selected" rel="tab1" ng:click="selected=1">Purchases</a>
    <a href="" title="" class="tab" rel="tab2" ng:click="selected=2">Products on sale</a>
    <a href="" title="" class="tab" rel="tab3" ng:click="selected=3">Last 30 days sales</a>
</div>

替换为:

   <div class="tabs" ng-init="selected=1">
            <a href="" title="" class="tab selected" rel="tab1" ng:click="selected=1" ng:class="{'active' : selected==1 }">Purchases</a>
            <a href="" title="" class="tab" rel="tab2" ng:click="selected=2" ng:class="{'active' : selected==2 }">Products on sale</a>
            <a href="" title="" class="tab" rel="tab3" ng:click="selected=3" ng:class="{'active' : selected==3 }">Last 30 days sales</a>
        </div>

请参阅DEMO此处