angularjs view loads only on hard refresh and not on redirect
I am working on my angular app and have setup the routes like so
angular.module('app', ['ngRoute']) .config(function ($routeProvider, $locationProvider) { $routeProvider.when('/', { template : "", controller : function($window) { $window.location.href = '/'; } }).when('/test', { redirectTo : '/test/dashboard' }).when('/test/dashboard', { templateUrl : '../partials/dashboard.html', controller : 'DashboardController' }).when('/test/unit', { templateUrl : '../partials/unit.html', controller : 'unitController' }); $locationProvider.html5Mode(true); });
HTML is
<body ng-app="app">
...
<div id="sidebar-wrapper" class="fill-height sidebar-nav">
<ul class="tabRow nav nav-stacked">
<li ng-class="{active: isActive('dashboard') }"><a id="dashboardLink" ng-href="#test/dashboard">Dashboard</a>
</li>
<li ng-class="{active: isActive('unit') }"><a id="unitLink" ng-href="#test/unit">Unit</a>
</li>
</ul>
</div>
...
</body>
Problem:
This code will redirect the URL to "/test/dashboard" when I enter "/test" but the html for that page does not show up. However when I refresh the page with that route, it displays the html in the content area of the page.
When I toggle between links, the dashboard shows up, just does not load the first time it is navigated to.
Also, when I change the redirect to /test/unit, it redirects correctly and displays the unit.html.
Not sure what is causing this behavior.
Any help would be appreciated.
I think you need to specify requireBase: false
while configuring html5Mode for your $locationProvider
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
Here is a working plnkr demo
For more context relative to your deployment you should be aware of this form angular docs
It works if you remove -
$locationProvider.html5Mode(true);
Or, going by a similar question's answer you could add -
<base href="/" />
to your <head />
.