mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
fix(ionView): observe for attr changes
This commit is contained in:
@@ -11,7 +11,9 @@ describe('ionView directive', function() {
|
||||
el = angular.element('<ion-view '+(attrs||'')+'>');
|
||||
el.data('$ionNavViewController', {
|
||||
beforeEnter: function(d) { beforeEnterData = d; },
|
||||
title: jasmine.createSpy('title'),
|
||||
showBar: jasmine.createSpy('showBar'),
|
||||
showBackButton: jasmine.createSpy('showBackButton')
|
||||
});
|
||||
content && el.html(content);
|
||||
|
||||
@@ -116,4 +118,73 @@ describe('ionView directive', function() {
|
||||
expect( beforeEnterData.hasHeaderBar ).toBe(true);
|
||||
}));
|
||||
|
||||
it('should only observe title attr after afterEnter and before beforeLeave', inject(function($rootScope) {
|
||||
var el = setup('view-title="{{ myTitle }}"', {myTitle: 'My Title'});
|
||||
$rootScope.$broadcast('$ionicView.beforeEnter', {});
|
||||
var spy = el.data('$ionNavViewController').title;
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.reset();
|
||||
|
||||
$rootScope.$broadcast('$ionicView.afterEnter', {});
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.reset();
|
||||
|
||||
el.scope().myTitle = 'My New Title';
|
||||
$rootScope.$digest();
|
||||
expect(spy).toHaveBeenCalledWith('My New Title');
|
||||
spy.reset();
|
||||
|
||||
$rootScope.$broadcast('$ionicView.beforeLeave', {});
|
||||
el.scope().myTitle = 'My Other New Title';
|
||||
$rootScope.$digest();
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.reset();
|
||||
}));
|
||||
|
||||
it('should only observe hideNavBar attr after afterEnter and before beforeLeave', inject(function($rootScope) {
|
||||
var el = setup('hide-nav-bar="{{ hide }}"', {hide: false});
|
||||
$rootScope.$broadcast('$ionicView.beforeEnter', {});
|
||||
var spy = el.data('$ionNavViewController').showBar;
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.reset();
|
||||
|
||||
$rootScope.$broadcast('$ionicView.afterEnter', {});
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.reset();
|
||||
|
||||
el.scope().hide = true;
|
||||
$rootScope.$digest();
|
||||
expect(spy).toHaveBeenCalledWith(false);
|
||||
spy.reset();
|
||||
|
||||
$rootScope.$broadcast('$ionicView.beforeLeave', {});
|
||||
el.scope().hide = false;
|
||||
$rootScope.$digest();
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.reset();
|
||||
}));
|
||||
|
||||
it('should only observe hideBackButton attr after afterEnter and before beforeLeave', inject(function($rootScope) {
|
||||
var el = setup('hide-back-button="{{ hide }}"', {hide: false});
|
||||
$rootScope.$broadcast('$ionicView.beforeEnter', {});
|
||||
var spy = el.data('$ionNavViewController').showBackButton;
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.reset();
|
||||
|
||||
$rootScope.$broadcast('$ionicView.afterEnter', {});
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.reset();
|
||||
|
||||
el.scope().hide = true;
|
||||
$rootScope.$digest();
|
||||
expect(spy).toHaveBeenCalledWith(false);
|
||||
spy.reset();
|
||||
|
||||
$rootScope.$broadcast('$ionicView.beforeLeave', {});
|
||||
el.scope().hide = false;
|
||||
$rootScope.$digest();
|
||||
expect(spy).not.toHaveBeenCalled();
|
||||
spy.reset();
|
||||
}));
|
||||
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user