在这里我想在项目中封装一个图片轮播的指令

(本项目使用的是ionic框架)

1)定义指令

 define(['app'],function(myapp){
myapp.directive('myslidebanner',['$state',function(s){
return{
templateUrl:'directives/slide-banner/slide-banner.html',
scope:{
banimg:'=',//数据的来源
},
link:function(s,el,atr){
s.$watch('banimg',function(picList){
//在这里,我使用的了,$watch监听banimg,原因就是banimg的数据是来自于数据
//库,这就会造成页面渲染结束,数据还没有取到的尴尬现象
if(picList)
s.picList=picList;
});
s.showbaner=atr.showbaner;//atr是使用指令的元素的属性集合
},
controller:['$state','$scope',function($state,s){ }]
}
}]);
});

 指令的模板页面:

<div class="index-banner">
<!--<img ng-src="img/deal/home/banner.png" style="width:100%;">-->
<div ng-if="!showbaner">
<div style="left: 0px; transition-duration: 300ms; transform: translate(0px, 0px) translateZ(0px);">
<a class="box">
<img ng-src={{banimg[0].imgdomin+banimg[0].imgid}} style="height:305px">
</a>
</div>
</div>
<div class="app_index_slide" ng-if="showbaner">
<ion-slide-box class="app_index_slide" does-continue="true" auto-play="true"
on-slide-changed="slideChanged($index)"
delegate-handle="slideimgs"
>
<ion-slide ng-repeat="item in picList track by $index">
<!--href="#/tab/ad_linkurl?url={{item.LinkUrl}}&title={{item.Title}}"-->
<a class="box" style="display:block" ui-sref="tab.deal_ad_linkurl({url:item.link,title:item.title})"><img
ng-src={{item.imgdomin+item.imgid}}></a>
</ion-slide>
</ion-slide-box>
</div>

2)指令的使用

 <myslidebanner banimg="banimg" showbaner="{{showbaner}}">
    <!--解释:banimg定义成‘=’的形式,在使用时候,是直接用双引号就行,不需要使用{{}},banimg的数据来源于页面控制器中调用接口返回数据来源-->
</myslidebanner>

指令中的controller,和link函数在一些情况下是可以相互代替的。

我们完全可以将link函数换成controller

定义时的独立作用域:
scope:{
  banimg:'=',
  showbaner:'='
}
controller:["$scope",'$state',function(s,$state){
    s.$watchGroup(['banimg','showbanner'],function(picList,showbaner){
    if(picList)
      s.picList=picList;
      s.showbaner=true;
  });
}]

 使用的时候:

<myslidebanner banimg="banimg" showbaner="showbaner"> 
</myslidebanner>

  

 

 

 

最新文章

  1. DOM基础知识
  2. nginx配置返回文本或json
  3. Java易混淆的概率:成员变量、类变量、实例变量、局部变量
  4. ASP.Net一键自动化更新代码、编译、合并dll、压缩js、css、混淆dll、zip打包、发布到测试环境的bat批处理
  5. CSS3 3D轮播主要可以分成这样的三类
  6. java二维数组的常见初始化
  7. Linux 下安装 jdk压缩包
  8. [51单片机] EEPROM AT24c02 [存储\读取一个字节]
  9. flex布局滑动页面
  10. poj 3689 树形dp
  11. wifi详解(二)
  12. Java OOP考试错题分析
  13. 改动hosts权限
  14. 从分布式一致性到共识机制(二)Raft算法
  15. Oracle 12c 单实例安装
  16. ubuntu 14.04 重装机 安装笔记 无线网卡+cuda+nvidia
  17. Luogu 1068 - 分数线划定 - [快速排序]
  18. 再会,OI
  19. 【问题解决:Mysql操作容量限制问题】Error updating database. Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1082 &gt; 1024)
  20. [mysql语句] mysql 语句收集

热门文章

  1. PHP 的 HTTP 认证机制
  2. Elasticsearch单机下多实例配置
  3. python里实现DSL
  4. SQL基础用法(实例二)
  5. MySql和Sql的单行注释和多行注释的区别
  6. FZU 2124 吃豆人 bfs
  7. MongoDB中_id(ObjectId)生成
  8. oracleXE默认的管理员登录用户
  9. Pycharm(三)常用设置
  10. L1-004 计算摄氏温度