Angularjs编写选项卡

我们以某招聘网站的岗位分类为例。
Angularjs编写选项卡
我们先查看一下我们请求到的json数据。

company.json

{
    "id": "c1",
    "imageUrl": "/image/company-1.png",
    "name": "XX网",
    "industry": "移动互联网",
    "state": "A轮",
    "people": "50-150人",
    "positionClass": [{
      "id": "jishu",
      "name": "技术",
      "positionList": [{
        "id": "p1",
        "name": "IOS前端工程师",
        "createdDate": "2016-04-16 23:30",
        "salary": "15k-25k"
      }]
    }, {
      "id": "yunying",
      "name": "运营",
      "positionList": [{
        "id": "y1",
        "name": "运营总监",
        "createdDate": "2016-04-10 13:30",
        "salary": "25k以上"
      }]
    }]
}

company.html页面

<div app-head-bar text="公司职位"></div>
<div app-company com="company"></div> //给指令声明com的接口
<div app-position-class com="company"></div>//给指令声明com的接口

companyCtrl.js控制器

'use strict';
angular.module('app').controller('companyCtrl',
    ['$http', '$state', '$scope', function($http, $state, $scope){
    $http.get('data/company.json?id='+$state.params.id).
    success(function(resp){
        $scope.company = resp;//将请求的结果传给company的属性
    });
}]);

positionClass.js指令

'use strict';
angular.module('app').directive('appPositionClass', [function(){
    return {
        restrict: 'A',
        replace: true,
        scope: { //声明接口
            com: '='
        },
        templateUrl: 'view/template/positionClass.html',
        //④添加指令逻辑
        link: function($scope) {
            $scope.showPositionList = function(idx) {
                $scope.positionList = $scope.com.positionClass[idx].positionList;
                //⑤把索引值传给isActive
                $scope.isActive = idx;
            }
            //⑦所以监控com属性,传入函数,监控这个属性改变之后的值,
            $scope.$watch('com',function (newVal) {
            //⑥添加默认选中按钮,但是报错了,因为我们在调用showPositionList(0)这个函数的时候,com对象并没有传入,控制器还在发送ajax请求等待返回的过程,这个时候可能appPositionClass指令就已经加载了,正确的做法是当com传入过来以后,再调用这个函数,来对这个指令进行初始化,默认选中第一个
            //⑧只要第一个值存在的时候,就调用这个函数,对指令进行初始化
               if(newVal)  $scope.showPositionList(0);
            });
        }
    };
}]);

positionClass.html指令模板

<div class="position-class">
    <h5>职位分类</h5>
    <button ng-click="showPositionList($index)" class="{{$index===isActive?'active':''}}" ng-repeat="cls in com.positionClass" ng-bind="cls.name"></button>
<!--
①使用ng-repeat指令来创建重复的DOM元素.
②使用ng-bind指令绑上相关数据,
③ng-click="showPositionList($index)" class="{{$index===isActive?'active':''}}
添加点击事件和样式,点事件传入当前索引值,当按钮是当前索引值的时候添加active样式

-->

    <ul>
        <li class="p-r" ng-repeat="pos in positionList">
            <p ng-bind="pos.name"></p>
            <p ng-bind="pos.createdDate"></p>
            <span ng-bind="pos.salary" class="p-a"></span>
        </li>
    </ul>
</div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值