2016-10-06 76 views
0

我有一个控制器,它在角度上使用$location服务,但是我们只需要在HTML5模式下使用它,如果浏览器不支持history.pushstate我们希望忽略来自控制器的服务所以它不会将URL重写为/#/2016-17,而是不会执行任何路由。但是,如果您将$location注入控制器,它将使用hashbang方法自动路由。下面在某些浏览器上向控制器注入服务

代码以供参考:

function SearchAdvancedController($location) { 
    $location.url("/", false); 
} 

function config($locationProvider) { 
    $locationProvider.html5Mode({ 
    enabled: true, 
    rewriteLinks: false, 
    requireBase: false 
    }); 
} 

任何想法?

谢谢你们。

+0

角度主要是为SPA。如果浏览器不支持'history.pushstate',每次都要重新加载应用程序? –

+0

@SteevePitis我不希望它做任何事情,$ location不是一个重要的功能,它用于的所有功能都是当用户搜索时更改URL,这不是旧版浏览器的关键功能 –

回答

0

您应该始终将服务注入您的控制器,除非您需要很多if..else条件来检查服务是否存在。最简单的事情就是定义自己的服务来改变的网址,并有条件地有它什么都不做:

module.service('MyLocation', function ($location) { 
    this.url = function() { 
     if (/* browser supports pushstate */) { 
      $location.url.apply($location, arguments); 
     } 
    }; 
}); 

function SearchAdvancedController(MyLocation) { 
    MyLocation.url('/', false); 
} 

您可能希望与decorators玩弄为了这个目的了。

+0

这是否适用在页面加载呢? –

+0

意思是什么? – deceze

+0

$ location是否仍在注入? –