Angular directive for slick-carousel
- fixed dynamic data, discussed below in detail
- Using bower to install it.
bower install angular-slick-carousel
- Add
jquery
,angular
,slick-carousel
andangular-slick-carousel
to your code.
<link rel="stylesheet" href="../bower_components/slick-carousel/slick/slick.css">
<link rel="stylesheet" href="../bower_components/slick-carousel/slick/slick-theme.css">
<script src="../bower_components/jquery/jquery.js"></script>
<script src="../bower_components/angular/angular.js"></script>
<script src="../bower_components/slick-carousel/slick/slick.js"></script>
<script src="../bower_components/angular-slick-carousel/dist/angular-slick.min.js"></script>
- Add the sortable module as a dependency to your application module:
slickCarousel
var myAppModule = angular.module('MyApp', ['slickCarousel'])
This directive allows you to use the slick-carousel plugin as
an angular directive. It can be specified in your HTML
as either a <div>
attribute or a <slick>
element.
<slick infinite=true slides-to-show=3 slides-to-scroll=3>
...
</slick>
<slick
settings="slickConfig"
data="number" ng-if="numberLoaded">
</slick>
settings
: optional Object
containing any of the slick options. Consult here.
method
optional containing slick method. discussed below in detailevent
optional containing slick event
$scope.slickConfig = {
autoplay: true,
draggable: false,
autoplaySpeed: 3000,
method: {},
event: {
beforeChange: function (event, slick, currentSlide, nextSlide) {
},
afterChange: function (event, slick, currentSlide, nextSlide) {
}
}
};
data
: object for ng-repeat data, discussed below in detail
- All the functions in the plugin are exposed through a control attribute.
- To utilize this architecture, and have two-way data-binding, define an empty control handle on scope:
$scope.slickConfig = {
method: {}
}
- Pass it as the value to control attribute. Now, you can call any plugin methods as shown in the example.
<button ng-click="slickConfig.method.slickGoTo(2)">slickGoTo(2)</button>
<button ng-click="slickConfig.method.slickPrev()">slickPrev()</button>
<button ng-click="slickConfig.method.slickNext()">slickNext()</button>
<button ng-click='slickConfig.method.slickAdd("<div>New</div>")'>slickAdd()</button>
<button ng-click='slickConfig.method.slickRemove(3)'>slickRemove(3)</button>
<button ng-click='slickConfig.method.slickPlay()'>slickPlay()</button>
<button ng-click='slickConfig.method.slickPause()'>slickPause()</button>
For change slide content, you have to set data
attribute AND ng-if
- controller:
$scope.number = [{label: 1}, {label: 2}, {label: 3}, {label: 4}, {label: 5}, {label: 6}, {label: 7}, {label: 8}];
$scope.numberLoaded = true;
$scope.numberUpdate = function(){
$scope.numberLoaded = false; //disable slick
//number update
$scope.numberLoaded = true; //enable slick
};
- html:
<script type="text/ng-template" id="tpl.html">
<h3>{{ i.label }}</h3>
</script>
<slick data="number" ng-if="numberLoaded">
<div ng-repeat="i in number">
<div class="" ng-include="'tpl.html'"></div>
</div>
</slick>
config(['slickCarouselConfig', function (slickCarouselConfig) {
slickCarouselConfig.dots = true;
slickCarouselConfig.autoplay = false;
}])
- Create unit test