index.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../../vendor/bootstrap3/css/bootstrap.min.css"/>
</head>
<body>
<div ng-app="myApp">
<!--container为居中的div-->
<div class="container">
<div ng-controller="firstController">
<kittencup-group>
<kittencup-collapse ng-repeat="collapse in data" heading="{{collapse.title}}">
{{collapse.content}}
</kittencup-collapse>
</kittencup-group>
</div>
</div>
</div> <script type="text/javascript" src="../../vendor/angular/angularJs.js"></script>
<script type="text/javascript" src="app/index.js"></script> <script>
</script> </body>
</html>

  kittencupCollapse.html

<div class="panel panel-default">
<div class="panel-heading" ng-click="changeStatus()">
<h4 class="panel-title">
<a href="#">
{{heading}}
</a>
</h4>
</div>
<!--collapse为true 才会隐藏子内容-->
<div class="panel-collapse" ng-class="{collapse:!isOpen}">
<div class="panel-body" ng-transclude>
</div>
</div>
</div>

  index.js:

var myApp = angular.module('myApp', [])
//数据
.factory('myData', function () {
return [
{title: "no1", content: "no1-content1"},
{title: "no2", content: "no2-content2"},
{title: "no3", content: "no3-content3"}
];
})
//控制器
.controller('firstController', ['$scope', 'myData', function ($scope, myData) {//把myData注入进来
$scope.data = myData;
}])
.directive('kittencupGroup', function () {
return {
restrict: 'E',
replace: true,
template: '<div class="panel-group" ng-transclude></div>',//此处为kittencup-group标签里面的内容占位成一个panel-group
transclude: true,
controllerAs: 'kittencuupGroupController',
controller: function () {
this.groups = [];
//关闭其他的
this.closeOtehrCollapse = function (nowScope) {
angular.forEach(this.groups, function (scope) {
if (scope != nowScope) {
scope.isOpen = false;
}
})
}
}
}
})
.directive('kittencupCollapse', function () {
return {
restrict: 'E',
replace: true,
require: '^kittencupGroup',
templateUrl: 'temp/kittencupCollapse.html',
scope: {
heading: "@"
},
//link可以把其他的controller依赖注入进来
link: function (scope, element, attrs, kittencuupGroupController) {
scope.isOpen = false;
scope.changeStatus = function () {
scope.isOpen = !scope.isOpen;
kittencuupGroupController.closeOtehrCollapse(scope);
}
kittencuupGroupController.groups.push(scope);
},
transclude: true //将模板的内容放在指定的ng-transclude属性的标签里面去
}
})

  运行结果:

最新文章

  1. Android根据文件路径使用File类获取文件相关信息
  2. 跟着官网的例子学Reacjs (一)FilterableProductTable
  3. 一个奇妙的java坑:Long 类型的比较
  4. BCB 中测量Richedit 的文本总行高
  5. Heartbeat的两个小BUG
  6. 【WinRT】国内外 Windows 应用商店应用开发者博客收集
  7. 关于.NET邮件的收发问题总结
  8. jQuery Mobile的学习 jQuery Mobile工具栏、标题栏、页脚栏的定位学习
  9. jQuery实现列表自动滚动
  10. JavaScript/jQuery选择器简介
  11. 02_ Windows与Linux双重引导
  12. ArcGIS API for JavaScript 4.2学习笔记[3] 官方第二章Mapping and Views概览与解释
  13. 【树状数组】BZOJ3132 上帝造题的七分钟
  14. PDF加密无法做笔记
  15. SQL解决&quot;双重职位的查询&quot;
  16. Linux:Day18(下) Bind9
  17. 容器虚拟网卡与网桥docker0虚拟网卡的veth pair的配对
  18. 03MYSQL数据库
  19. 机器学习排序算法:RankNet to LambdaRank to LambdaMART
  20. Nginx 通过 Lua + Redis 实现动态封禁 IP

热门文章

  1. django的Session-10
  2. Scala中class、object、case class、case object区别
  3. 使用promis串行化异步操作
  4. springboot快速入门(三)——Controller的使用
  5. 20155237 2016-2017-2 《Java程序设计》第3周学习总结
  6. BSGS算法总结
  7. Cenos6.6 升级 python3.5.2 安装配置 django1.10
  8. linux中mycat的配置,分片,以及主从复制
  9. 【TestNG测试】TestNG、Maven、testng.xml构建测试工程
  10. Unity中容易被忽略的小技巧