Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

I am using angular, and my url always has a "!" (exclamation mark)

For example:

http://localhost/#!/login.html

I don't need "!". How would I remove it?

eg:http://localhost/#/login.html

This is my router code :

  // Redirect any unmatched url
$urlRouterProvider.otherwise("/login.html");
$stateProvider.state('login', {
    url: "/login.html",
    templateUrl: "views/login.html",
    data: {pageTitle: "login", isLeft: false},
    controller: "LoginCtrl",
    resolve: {
        deps: ['$ocLazyLoad', function ($ocLazyLoad) {
            return $ocLazyLoad.load({
                name: 'myApp',
                files: [
                    'controllers/LoginCtrl.js'
                ]
            });
        }]
    }
});

I think Angular-ui-router might have a problem, but I can't find the solution.

Thanks!

like image 803
AlwayS Avatar asked Nov 08 '16 03:11

AlwayS


1 Answers

Hashbang Mode

Hashbang mode is a trick that AngularJS uses to provide deep-linking capabilities to your Angular apps. In hashbang mode (the fallback for html5 mode), URL paths take a prepended # character. They do not rewrite tags and do not require any server-side support. Hashbang mode is the default mode that AngularJS uses if it’s not told otherwise. A hashbang URL looks like:

http://yoursite.com/#!/inbox/all

To be explicit and configure hashbang mode, it needs to be configured in the config function on an app module

We can also configure the hashPrefix, which, in hashbang mode, is the ! prefix. This prefix is part of the fallback mechanism that Angular uses for older browsers. We can also configure this character.

To configure the hashPrefix:

angular.module('myApp', ['ngRoute'])
.config(['$locationProvider', function($locationProvider) {
$locationProvider.html5Mode(false);
$locationProvider.hashPrefix('!');
}]);
like image 59
Jigar7521 Avatar answered Sep 19 '22 09:09

Jigar7521