全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解如何将angular-ui的图片轮播组件封装成一个指令

在项目开发中我们经常会遇到图片轮播的功能点:

如果我们开发人员自己原生手写,将会花费很多的时间,最终得不偿失。

接下来就详细说说如何使用angular-ui发热图片轮播模块,并且将它写成一个指令(便于复用)

一如既往的我们项目中使用时requireJS进行js代码的编译

准备工作:

 1):引入angularJS , ui-bootstrap-tpls-1.3.2(我使用的是1.3.2版本的)

第一步:自己写一个指令(命名为picchange)

说明:指令控制器中的代码都是angualr-ui官网上拷贝的(因为此文章的重点是如何将其封装成指令,其他的不做重点)

指令的js代码

define(['app'],function(myapp){
  myapp.directive('picchange',[function(){
    return {
      scope:{
        picurl:'=',
      },
      controller:['$scope',function($scope){
        $scope.myInterval = 5000;//轮播的时间间隔
        $scope.noWrapSlides = false;//是否循环轮播
        $scope.active = 0;//起始所显示的图片(0:下标为0的图片)
        var slides = $scope.slides = [];//用于存放图片地址
        var currIndex = 0;
        $scope.addSlide = function() {
          var newWidth = slides.length + 1;
          slides.push({
            image: $scope.picurl[newWidth].imgUrl,//图片的url
            text: $scope.picurl[newWidth].wordDes,//图片的描述文字
            id: currIndex++
          });
        };
       //................随机...........
        $scope.randomize = function() {
          var indexes = generateIndexesArray();
          assignNewIndexesToSlides(indexes);
        };
        for (var i = 0;i<$scope.picurl.length;i++) {
          $scope.addSlide();
        }
        // Randomize logic below
        function assignNewIndexesToSlides(indexes) {
          for (var i = 0, l = slides.length; i < l; i++) {
            slides[i].id = indexes.pop();
          }
        }
        function generateIndexesArray() {
          var indexes = [];
          for (var i = 0; i < currIndex; ++i) {
            indexes[i] = i;
          }
          return shuffle(indexes);
        }
        // http://stackoverflow.com/questions/962802#962890
        function shuffle(array) {
          var tmp, current, top = array.length;
          if (top) {
            while (--top) {
              current = Math.floor(Math.random() * (top + 1));
              tmp = array[current];
              array[current] = array[top];
              array[top] = tmp;
            }
          }
          return array;
        }
      }],
      templateUrl:'js/directives/picchange/picchange.html',//轮播的页面
      link:function(s,e,attrs){
      },
    }
  }]);
});

好了上面的代码都是拷贝来的,不做解释

轮播模块的html:(picchange.html),指令的html(这个没啥理解的)

指令的html

<div>

  <div style="height: 305px;">

    <uib-carousel no-wrap="noWrapSlides" interval="myInterval" active="active">

      <uib-slide index="slide.id" ng-repeat="slide in slides track by slide.id">

        <img style="margin: auto;" ng-src="{{slide.image}}">

        <div class="carousel-caption">

          <h4>Slide {{slide.id}}</h4>

          <p>{{slide.text}}</p>

        </div>

      </uib-slide>

    </uib-carousel>

  </div>

  <div class="row">

    <div class="col-md-6">

      <button class="btn btn-info" type="button" ng-click="addSlide()">Add Slide</button>

      <button class="btn btn-info" type="button" ng-click="randomize()">Randomize slides</button>

      <div class="checkbox">

        <label>

          <input type="checkbox" ng-model="noWrapSlides">

          Disable Slide Looping

        </label>

      </div>

    </div>

    <div class="col-md-6">

      Interval, in milliseconds: <input class="form-control" type="number" ng-model="myInterval">

      <br>Enter a negative number or 0 to stop the interval.

    </div>

  </div>

</div>  

到此为止关于指令的封装已经完成,接下来是如何使用的问题:

(1)有一个页面要用到此指令:(命名为test.html)

<p>图片的轮播</p>

<div picurl="img" picchange=""></div><!--img是用来传递参数的--> 

test.html对应的控制器:(idea_test_ctrl)

define(['app','directives/picchange/picchange'],function(myapp){
  myapp.controller('idea_test_ctrl',['$scope',function($scope){
    console.log("this is idea_test_ctrl 的控制器");
    $scope.img=[//img是一个对象,其中包含了图片的地址,以及文字描述
      {imgUrl:'images/test/1.jpg',wordDes:'this is good pic'},
      {imgUrl:'images/test/2.jpg',wordDes:'这是一张很好看的图片'},
      {imgUrl:'images/test/3.jpg',wordDes:'it is good pic'}
    ];

  }]);
});

这里给出我的路由配置,便于大家理解:

.state('home.ideas.test', {//(测试)

        url: '/test',

        views: {

          "part": {

            templateUrl: 'tpls/ideas/test.html',

            controller:"idea_test_ctrl"

          }

       }

 }) 

 到此已经讲解完;

ui-bootstrap的地址:http://angular-ui.github.io/bootstrap/versioned-docs/1.3.2/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# angular轮播图指令  # angular  # 封装组件  # 利用AngularJs实现京东首页轮播图效果  # 简单实现AngularJS轮播图效果  # angularjs实现首页轮播图效果  # Angular2利用组件与指令实现图片轮播组件  # Ionic + Angular.js实现图片轮播的方法示例  # 都是  # 不做  # 到此  # 命名为  # 如何使用  # 的是  # 是一个  # 这是  # 好了  # 将会  # 其他的  # 将其  # 要用  # 得不偿失  # 到此为止  # 将它  # 准备工作  # 经常会  # 开发人员  # 没啥 


相关文章: 网站制作报价单模板图片,小松挖机官方网站报价?  高端建站三要素:定制模板、企业官网与响应式设计优化  建站之星安全性能如何?防护体系能否抵御黑客入侵?  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  c# Task.ConfigureAwait(true) 在什么场景下是必须的  公司网站的制作公司,企业网站制作基本流程有哪些?  深圳网站制作平台,深圳市做网站好的公司有哪些?  官网建站费用明细查询_企业建站套餐价格及收费标准指南  成都响应式网站开发,dw怎么把手机适应页面变成网页?  名字制作网站免费,所有小说网站的名字?  如何用搬瓦工VPS快速搭建个人网站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何选择PHP开源工具快速搭建网站?  如何在Windows环境下新建FTP站点并设置权限?  学校免费自助建站系统:智能生成+拖拽设计+多端适配  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  如何在建站之星绑定自定义域名?  如何用5美元大硬盘VPS安全高效搭建个人网站?  移民网站制作流程,怎么看加拿大移民官网?  如何快速生成ASP一键建站模板并优化安全性?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  企业微网站怎么做,公司网站和公众号有什么区别?  建站之星上传入口如何快速找到?  如何选择高效可靠的多用户建站源码资源?  如何在云主机上快速搭建多站点网站?  建站主机选哪种环境更利于SEO优化?  制作网站的网址是什么,请问后缀为.com和.com.cn还有.cn的这三种网站是分别是什么类型的网站?  如何通过云梦建站系统实现SEO快速优化?  建站VPS能否同时实现高效与安全翻墙?  文字头像制作网站推荐软件,醒图能自动配文字吗?  高性价比服务器租赁——企业级配置与24小时运维服务  南平网站制作公司,2025年南平市事业单位报名时间?  ,有什么在线背英语单词效率比较高的网站?  如何获取PHP WAP自助建站系统源码?  如何使用Golang安装API文档生成工具_快速生成接口文档  常州自助建站费用包含哪些项目?  如何获取上海专业网站定制建站电话?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  北京网站制作的公司有哪些,北京白云观官方网站?  魔方云NAT建站如何实现端口转发?  大连 网站制作,大连天途有线官网?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  广德云建站网站建设方案与建站流程优化指南  网站制作公司广州有几家,广州尚艺美发学校网站是多少?    如何通过.red域名打造高辨识度品牌网站?  如何通过西部数码建站助手快速创建专业网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。