fix(disconnect): move scope disconnect before enter

This commit is contained in:
Adam Bradley
2014-11-24 23:03:30 -06:00
parent 03d2f1ca8f
commit fb81f9704f
2 changed files with 31 additions and 2 deletions

View File

@@ -166,6 +166,9 @@ function($timeout, $document, $q, $ionicClickBlock, $ionicConfig, $ionicNavBarDe
var enteringData = getTransitionData(viewLocals, enteringEle, registerData.direction, enteringView);
var transitionFn = $ionicConfig.transitions.views[enteringData.transition];
// disconnect the leaving scope before reconnecting or creating a scope for the entering view
leavingEle && ionic.Utils.disconnectScope(leavingEle.scope());
if (alreadyInDom) {
// it was already found in the DOM, just reconnect the scope
ionic.Utils.reconnectScope(enteringEle.scope());
@@ -345,8 +348,6 @@ function($timeout, $document, $q, $ionicClickBlock, $ionicConfig, $ionicNavBarDe
destroyViewEle(removableEle);
ionic.Utils.disconnectScope(leavingEle && leavingEle.scope());
if (enteringEle.data(DATA_NO_CACHE)) {
enteringEle.data(DATA_DESTROY_ELE, true);
}

View File

@@ -480,6 +480,34 @@ describe('Ionic nav-view', function() {
expect(divs.eq(0).attr('nav-view')).toBe('active');
}));
it('should disconnect and reconnect view scopes', inject(function ($state, $q, $timeout, $compile) {
elem.append($compile('<div><ion-nav-view></ion-nav-view></div>')(scope));
$state.go(page1State);
$q.flush();
$timeout.flush();
$timeout.flush();
var divs = elem.find('ion-nav-view').find('div');
expect(divs.eq(0).scope().$$disconnected).toBeUndefined();
$state.go(page2State);
$q.flush();
$timeout.flush();
$timeout.flush();
divs = elem.find('ion-nav-view').find('div');
expect(divs.eq(0).scope().$$disconnected).toBe(true);
expect(divs.eq(1).scope().$$disconnected).toBeUndefined();
$state.go(page1State);
$q.flush();
$timeout.flush();
$timeout.flush();
divs = elem.find('ion-nav-view').find('div');
expect(divs.eq(0).scope().$$disconnected).toBe(false);
}));
it('should not cache ion-nav-views that were forward when moving back', inject(function ($state, $q, $timeout, $compile, $ionicConfig) {
elem.append($compile('<div><ion-nav-view></ion-nav-view></div>')(scope));