refact(ionScroll): add $onScroll binding

Closes #865
This commit is contained in:
Andy Joslin
2014-03-21 10:07:00 -05:00
parent f594f653d5
commit 4dd952a54d
3 changed files with 35 additions and 10 deletions

View File

@@ -23,18 +23,10 @@ angular.module('ionic.ui.scroll', [])
* @param {boolean=} scrollbar-x Whether to show the horizontal scrollbar. Default false.
* @param {boolean=} scrollbar-x Whether to show the vertical scrollbar. Default true.
*/
.directive('ionScroll', ['$parse', '$timeout', '$controller', function($parse, $timeout, $controller) {
.directive('ionScroll', ['$parse', '$timeout', '$controller', '$ionicBind', function($parse, $timeout, $controller, $ionicBind) {
return {
restrict: 'E',
scope: {
direction: '@',
paging: '@',
onRefresh: '&',
onScroll: '&',
scroll: '@',
scrollbarX: '@',
scrollbarY: '@',
},
scope: true,
controller: function() {},
compile: function(element, attr) {
element.addClass('scroll-view');
@@ -48,6 +40,15 @@ angular.module('ionic.ui.scroll', [])
function prelink($scope, $element, $attr) {
var scrollView, scrollCtrl;
$ionicBind($scope, $attr, {
direction: '@',
paging: '@',
$onScroll: '&onScroll',
scroll: '@',
scrollbarX: '@',
scrollbarY: '@',
});
if (angular.isDefined($attr.padding)) {
$scope.$watch($attr.padding, function(newVal) {
innerElement.toggleClass('padding', !!newVal);

View File

@@ -21,6 +21,18 @@ describe('Ionic Content directive', function() {
expect(element.hasClass('scroll-content')).toBe(true);
});
it('has $onScroll (used by $ionicScrollController)', function() {
element = compile('<ion-scroll on-scroll="foo()"></ion-scroll>')(scope);
scope = element.scope();
scope.foo = jasmine.createSpy('foo');
scope.$apply();
expect(typeof scope.$onScroll).toBe('function');
expect(scope.foo).not.toHaveBeenCalled();
scope.$onScroll();
expect(scope.foo).toHaveBeenCalled();
});
it('should add padding classname', function() {
var element = compile('<ion-content padding="shouldPad"></ion-content>')(scope);
var scrollElement = element.find('.scroll');

View File

@@ -19,6 +19,18 @@ describe('Ionic Scroll Directive', function() {
expect(element.controller('$ionicScroll').element).toBe(element[0]);
});
it('has $onScroll (used by $ionicScrollController)', function() {
element = compile('<ion-scroll on-scroll="foo()"></ion-scroll>')(scope);
scope = element.scope();
scope.foo = jasmine.createSpy('foo');
scope.$apply();
expect(typeof scope.$onScroll).toBe('function');
expect(scope.foo).not.toHaveBeenCalled();
scope.$onScroll();
expect(scope.foo).toHaveBeenCalled();
});
it('Has scroll-view class', function() {
element = compile('<ion-scroll></ion-scroll>')(scope);
expect(element.hasClass('scroll-view')).toBe(true);