mirror of
https://github.com/ionic-team/ionic-framework.git
synced 2026-03-13 10:22:08 +08:00
refactor(): reorganize source files
This commit is contained in:
97
js/angular/controller/tabsController.js
vendored
Normal file
97
js/angular/controller/tabsController.js
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
IonicModule
|
||||
.controller('$ionicTabs', [
|
||||
'$scope',
|
||||
'$ionicViewService',
|
||||
'$element',
|
||||
function($scope, $ionicViewService, $element) {
|
||||
var _selectedTab = null;
|
||||
var self = this;
|
||||
self.tabs = [];
|
||||
|
||||
self.selectedIndex = function() {
|
||||
return self.tabs.indexOf(_selectedTab);
|
||||
};
|
||||
self.selectedTab = function() {
|
||||
return _selectedTab;
|
||||
};
|
||||
|
||||
self.add = function(tab) {
|
||||
$ionicViewService.registerHistory(tab);
|
||||
self.tabs.push(tab);
|
||||
if(self.tabs.length === 1) {
|
||||
self.select(tab);
|
||||
}
|
||||
};
|
||||
|
||||
self.remove = function(tab) {
|
||||
var tabIndex = self.tabs.indexOf(tab);
|
||||
if (tabIndex === -1) {
|
||||
return;
|
||||
}
|
||||
//Use a field like '$tabSelected' so developers won't accidentally set it in controllers etc
|
||||
if (tab.$tabSelected) {
|
||||
self.deselect(tab);
|
||||
//Try to select a new tab if we're removing a tab
|
||||
if (self.tabs.length === 1) {
|
||||
//do nothing if there are no other tabs to select
|
||||
} else {
|
||||
//Select previous tab if it's the last tab, else select next tab
|
||||
var newTabIndex = tabIndex === self.tabs.length - 1 ? tabIndex - 1 : tabIndex + 1;
|
||||
self.select(self.tabs[newTabIndex]);
|
||||
}
|
||||
}
|
||||
self.tabs.splice(tabIndex, 1);
|
||||
};
|
||||
|
||||
self.deselect = function(tab) {
|
||||
if (tab.$tabSelected) {
|
||||
_selectedTab = null;
|
||||
tab.$tabSelected = false;
|
||||
(tab.onDeselect || angular.noop)();
|
||||
}
|
||||
};
|
||||
|
||||
self.select = function(tab, shouldEmitEvent) {
|
||||
var tabIndex;
|
||||
if (angular.isNumber(tab)) {
|
||||
tabIndex = tab;
|
||||
tab = self.tabs[tabIndex];
|
||||
} else {
|
||||
tabIndex = self.tabs.indexOf(tab);
|
||||
}
|
||||
if (!tab || tabIndex == -1) {
|
||||
throw new Error('Cannot select tab "' + tabIndex + '"!');
|
||||
}
|
||||
|
||||
if (_selectedTab && _selectedTab.$historyId == tab.$historyId) {
|
||||
if (shouldEmitEvent) {
|
||||
$ionicViewService.goToHistoryRoot(tab.$historyId);
|
||||
}
|
||||
} else {
|
||||
angular.forEach(self.tabs, function(tab) {
|
||||
self.deselect(tab);
|
||||
});
|
||||
|
||||
_selectedTab = tab;
|
||||
//Use a funny name like $tabSelected so the developer doesn't overwrite the var in a child scope
|
||||
tab.$tabSelected = true;
|
||||
(tab.onSelect || angular.noop)();
|
||||
|
||||
if (shouldEmitEvent) {
|
||||
var viewData = {
|
||||
type: 'tab',
|
||||
tabIndex: tabIndex,
|
||||
historyId: tab.$historyId,
|
||||
navViewName: tab.navViewName,
|
||||
hasNavView: !!tab.navViewName,
|
||||
title: tab.title,
|
||||
//Skip the first character of href if it's #
|
||||
url: tab.href,
|
||||
uiSref: tab.uiSref
|
||||
};
|
||||
$scope.$emit('viewState.changeHistory', viewData);
|
||||
}
|
||||
}
|
||||
};
|
||||
}]);
|
||||
|
||||
Reference in New Issue
Block a user