在angularjs应用程序中散列(#!)后的感叹号

时间:2016-12-19 00:24:25

标签: angularjs

我只是注意到我在所有路线中都有哈希(#!)之后有感叹号,我不知道我是怎么回事以及为什么我得到它们因为今天我没有它们,是否有任何解决办法摆脱如果有人能解释我是什么,以及我是如何得到它的,我会很感激。因此,到目前为止我找到的解决方案只是在我的应用程序中的每个href上手动设置感叹号,但是这让我烦恼,我不知道该怎么做。我使用yeoman生成器生成了我的应用程序,我的app.js看起来像这样

angular
  .module('appNameApp', [
    'ngAnimate',
    'ngCookies',
    'ngResource',
    'ngRoute',
    'ngSanitize',
    'ngTouch'
  ])
  .config(function ($routeProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl',
        controllerAs: 'main'
      })
      .when('/about', {
        templateUrl: 'views/about.html',
        controller: 'AboutCtrl',
        controllerAs: 'about'
      })
      .when('/jaspo', {
        templateUrl: 'views/about.html',
        controller: 'jaspoCtrl',
        controllerAs: 'vm'
      })
      .otherwise({
        redirectTo: '/'
      });
  });

3 个答案:

答案 0 :(得分:80)

修改这两行:

  .config(function ($routeProvider) {
$routeProvider

是:

    .config(function ($routeProvider,$locationProvider) {
    $locationProvider.hashPrefix('');
    $routeProvider

信用证应转至:https://stackoverflow.com/a/41223197/1564146

答案 1 :(得分:27)

您可能已将角度版本从1.5更新为1.6,因为在1.6上,角度团队决定将默认的$ location hash-prefix更改为'!'。就像@Skrew建议的那样,您可以将其更改为''与$locationProvider.hashPrefix('');

你可以阅读

Here

答案 2 :(得分:2)

您的函数缺少locationProvider,需要为locationProvider指定html5Mode。见https://docs.angularjs.org/api/ng/provider/$locationProvider。而不是:

.config(function ($routeProvider) { $routeProvider .when('/', {

尝试:

.config(function ($locationProvider, $routeProvider) { $locationProvider.html5Mode({ enabled:true }); $routeProvider .when('/',{

默认情况下,您还需要在index.html文件中指定基本标记<base href="/">