Skip to content

Commit 8ab9778

Browse files
committed
Merge pull request #528 from tgecho/basehref
Prepend the baseHref to $state.href() generated urls if it exists.
2 parents 91a5684 + cbcc848 commit 8ab9778

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

src/state.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -501,14 +501,15 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
501501
*/
502502
// $urlRouter is injected just to ensure it gets instantiated
503503
this.$get = $get;
504-
$get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$location', '$urlRouter'];
505-
function $get( $rootScope, $q, $view, $injector, $resolve, $stateParams, $location, $urlRouter) {
504+
$get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$location', '$urlRouter', '$browser'];
505+
function $get( $rootScope, $q, $view, $injector, $resolve, $stateParams, $location, $urlRouter, $browser) {
506506

507507
var TransitionSuperseded = $q.reject(new Error('transition superseded'));
508508
var TransitionPrevented = $q.reject(new Error('transition prevented'));
509509
var TransitionAborted = $q.reject(new Error('transition aborted'));
510510
var TransitionFailed = $q.reject(new Error('transition failed'));
511511
var currentLocation = $location.url();
512+
var baseHref = $browser.baseHref();
512513

513514
function syncUrl() {
514515
if ($location.url() !== currentLocation) {
@@ -1038,6 +1039,15 @@ function $StateProvider( $urlRouterProvider, $urlMatcherFactory, $
10381039
if (!$locationProvider.html5Mode() && url) {
10391040
url = "#" + $locationProvider.hashPrefix() + url;
10401041
}
1042+
1043+
if (baseHref !== '/') {
1044+
if ($locationProvider.html5Mode()) {
1045+
url = baseHref.slice(0, -1) + url;
1046+
} else if (options.absolute){
1047+
url = baseHref.slice(1) + url;
1048+
}
1049+
}
1050+
10411051
if (options.absolute && url) {
10421052
url = $location.protocol() + '://' +
10431053
$location.host() +

test/stateSpec.js

+22
Original file line numberDiff line numberDiff line change
@@ -639,6 +639,28 @@ describe('state', function () {
639639
locationProvider.hashPrefix("!");
640640
expect($state.href("home")).toEqual("#!/");
641641
}));
642+
643+
describe('when $browser.baseHref() exists', function() {
644+
beforeEach(inject(function($browser) {
645+
spyOn($browser, 'baseHref').andCallFake(function() {
646+
return '/base/';
647+
});
648+
}));
649+
650+
it('does not prepend relative urls', inject(function($state) {
651+
expect($state.href("home")).toEqual("#/");
652+
}));
653+
654+
it('prepends absolute urls', inject(function($state) {
655+
expect($state.href("home", null, { absolute: true })).toEqual("http://server/base/#/");
656+
}));
657+
658+
it('prepends relative and absolute urls in html5Mode', inject(function($state) {
659+
locationProvider.html5Mode(true);
660+
expect($state.href("home")).toEqual("/base/");
661+
expect($state.href("home", null, { absolute: true })).toEqual("http://server/base/");
662+
}));
663+
});
642664
});
643665

644666
describe('.get()', function () {

0 commit comments

Comments
 (0)