diff --git a/README.md b/README.md index 03fb7a5..e2a197e 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,10 @@ npm install nativescript-ng2-carousel --save 3. To use the CarouselDirective, create a template that applies the directive as an attribute to a paragraph GridLayout element:
-<GridLayout [carousel]="images" carouselLabelOverlay="true" carouselSpeed="2000">
+<GridLayout [carousel]="images"
+               carouselLabelOverlay="true"
+               carouselSpeed="2000"
+               (selectedImageChange)="select($event)">
     
 </GridLayout>
 
@@ -135,6 +138,7 @@ Currently directive supported attributes: * **carouselAnimationSpeed** _(optional)_ defines the animation speed (number in ms) * **carouselArrows** _(optional)_ arrow type, accepted values _none_, _small_, _normal_, _bold_ or _narrow_ (default _normal_) * **carouselLabelOverlay** _(optional)_ silde title over image, accepted values _true_ or _false_ (default false) +* **selectedImageChange** _(optional)_ get the title of the selected image (key) ## Changelog diff --git a/nativescript-ng2-carousel.ts b/nativescript-ng2-carousel.ts index 4a133af..55bd51e 100644 --- a/nativescript-ng2-carousel.ts +++ b/nativescript-ng2-carousel.ts @@ -3,14 +3,10 @@ import {AnimationCurve} from "ui/enums"; import {Image} from "ui/image"; import {StackLayout} from "ui/layouts/stack-layout"; import {GridLayout, ItemSpec} from "ui/layouts/grid-layout"; -import {GridUnitType} from "ui/layouts/grid-layout"; -import {HorizontalAlignment} from "ui/enums"; import {Label} from "ui/label"; import {GestureTypes} from "ui/gestures"; import {View} from "ui/core/view"; -import {Visibility} from "ui/enums"; -import {fromFile} from "image-source"; -import {fromResource} from "image-source"; +import {fromFile, fromResource} from "image-source"; @Directive({selector: '[carousel]'}) export class CarouselDirective implements AfterViewInit { @@ -40,6 +36,8 @@ export class CarouselDirective implements AfterViewInit { @Input() carouselLabelOverlay: boolean; // title over image (bool) @Input() carouselAnimationSpeed: number; // animation speed + @Output() selectedImageChange: EventEmitter = new EventEmitter(); + constructor(private elem: ElementRef) { this.container = elem.nativeElement; } @@ -128,16 +126,25 @@ export class CarouselDirective implements AfterViewInit { if (slide.url) { let image: Image = CarouselDirective.generateImageSliderFromUrl(slide.url); + image.on(GestureTypes.tap, () => { + this.selectedImageChange.emit( slide.title ); + }); gridLayout.addChild(image); } if (slide.file && slide.file.indexOf('res://') !== 0) { let image: Image = CarouselDirective.generateImageSliderFromFile(slide.file); + image.on(GestureTypes.tap, () => { + this.selectedImageChange.emit( slide.title ); + }); gridLayout.addChild(image); } if (slide.file && slide.file.indexOf('res://') === 0) { let image: Image = CarouselDirective.generateImageSliderFromResource(slide.file); + image.on(GestureTypes.tap, () => { + this.selectedImageChange.emit( slide.title ); + }); gridLayout.addChild(image); } diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..aa5c790 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,47 @@ +{ + "name": "nativescript-ng2-carousel", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@angular/core": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-6.1.3.tgz", + "integrity": "sha512-pqRfQphqIEExhDWM3RRusvLY6gFN0zdITC7TqQy6Wof6VKgWOvfHiHPbiamw4kpEzflMekuOeNm0s6h6hIUnWA==", + "requires": { + "tslib": "^1.9.0" + } + }, + "rxjs": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.2.2.tgz", + "integrity": "sha512-0MI8+mkKAXZUF9vMrEoPnaoHkfzBPP4IGwUYRJhIRJF6/w3uByO1e91bEHn8zd43RdkTMKiooYKmwz7RH6zfOQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "tns-core-modules": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tns-core-modules/-/tns-core-modules-4.2.0.tgz", + "integrity": "sha512-tEbQfeXVp6i9RJAmC+erd63mr6NYw5nX/gzYDVb1Va52/Jdj9ZeGbXKAPyjVXZ3BGI6O9QM1jQUem/Ow6v5FqQ==", + "requires": { + "tns-core-modules-widgets": "4.2.0" + } + }, + "tns-core-modules-widgets": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tns-core-modules-widgets/-/tns-core-modules-widgets-4.2.0.tgz", + "integrity": "sha512-0YlfWN1Wy2qFlnzwrwit910whA9TC9en1PxS/5Yx63lL9uXHyOB53C8POnKfM82YUFVPxifcpuYtCC7+DBXbag==" + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "zone.js": { + "version": "0.8.26", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.8.26.tgz", + "integrity": "sha512-W9Nj+UmBJG251wkCacIkETgra4QgBo/vgoEkb4a2uoLzpQG7qF9nzwoLXWU5xj3Fg2mxGvEDh47mg24vXccYjA==" + } + } +}