hru5模式与grunt服务无法正常工作

时间:2017-09-24 07:24:58

标签: angularjs gruntjs

在grunt文件中,livereload块看起来像这样:

livereload: {
  options: {
    open: true,
    middleware: function(connect, options, middleware) {
      var optBase = (typeof options.base === 'string') ? [options.base] : options.base;
      return [
        [require('connect-modrewrite')(['!(\\..+)$ / [L]'])].concat(
          optBase.map(function(path) {
            return connect.static(path);
          })),
        connect.static('.tmp'),
        connect().use(
          '/bower_components',
          connect.static('./bower_components')
        ),
        connect().use(
          '/app/styles',
          connect.static('./app/styles')
        ),
        connect.static(appConfig.app)
      ];
    }
  }
},

添加:

 [require('connect-modrewrite')(['!(\\..+)$ / [L]'])].concat(
                    optBase.map(function(path){ return connect.static(path); })),

确实用来为我工作启用html5模式,否则,我的路由不加载#!当我尝试通过浏览器重新加载时。

我在config中添加了基础href ='/'和html5Mode(true)。还有什么我可以尝试的吗?为什么它真的会停止工作?

  

注意:事实证明我的网址中有一个点,并且连接模式重写规则没有这样做。知道如何更改它并使其能够处理URL中的点吗?

2 个答案:

答案 0 :(得分:2)

尝试在配置块中的根应用程序模块中添加此项。确保包含/ inject $ locationProvider。

$locationProvider
  .html5Mode({
    enabled: true,
    requireBase: false
  })
  .hashPrefix('!');

答案 1 :(得分:1)

我认为点问题是一般问题的副作用。拥有相同的设置,或多或少。我只需重置$properties = gpresult /r if (Select-String -Pattern "server1" -InputObject $properties) { $server="server1" } if (Select-String -Pattern "server2" -InputObject $properties) {$server="server2" } $profilepath="\\$server\somepath$\$($env:USERNAME)\ 中的html5Mode,就像这样:

.config()

该应用仍然会在开发模式中为所有网址加上if (window.location.host == 'localhost:9000') { $locationProvider.html5Mode(false); $locationProvider.hashPrefix(''); } else { $locationProvider.html5Mode(true); } 作为前缀,从而使网址,链接和重新加载更加痛苦。通过将常规#/更改为/urls

的小指令解决了这个问题
/#/urls

现在可以通过var isLocalHost = (location.hostname === "localhost" || location.hostname === "127.0.0.1"); angular.module('myApp').directive('debugLink', function($timeout) { return { restrict: 'A', link: function(scope, element, attrs) { $timeout(function() { var href = element.attr('href'); if (href && isLocalHost && href.charAt(0) == '/') { element.attr('href', '#'+href); } }, 100); } } });

进行关联

最后,我使用生产服务器上https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions#how-to-configure-your-server-to-work-with-html5mode<a href="/url" debug-link>link</a>重定向

.htaccess

我在几个angularjs + grunt项目中使用这种方法。它可以防止livereload中断,即当我按 Ctrl - S 页面被刷新时,我可以在任何地方使用正确的URL。我想没有人对生产模式中的前缀或哈希感兴趣。