AngularJS + ui路由器和页面刷新

时间:2014-12-01 09:34:39

标签: javascript angularjs angular-ui-router

我只有一个观点,我遇到了这个奇怪的问题。问题是每当我通过刷新(Cmd + R / F5)浏览器重新加载它时,整个应用程序都无法工作,直到我更改路线(手动或通过单击链接)。视图在渲染之前解析了一些数据,我可以验证服务器没有任何请求。基本上当我刷新时,我看到我的所有脚本都被加载但我的控制器从未被调用过(在那里有一个console.log),我从来没有得到过渲染的视图。

这是州

    $stateProvider.state( 'purchases', {
    url: '/purchases',
    views: {
      "main": {
        controller: 'PurchasesCtrl',
        templateUrl: 'purchases/purchases.tpl.html'
      }
    },
    resolve: {
      purchases: function(PurchasesService, $rootScope) {
        return PurchasesService.getPurchasesForUser($rootScope.user._id);
      }
    },
    data:{ pageTitle: 'Purchases' }
  });
  $stateProvider.state( 'purchases_buy', {
    url: '/purchases/buy/{itemId:[0-9a-fA-F]{24}}',
    views: {
      "main": {
        controller: 'PurchasesBuyCtrl',
        templateUrl: 'purchases/purchases_buy.tpl.html'
      }
    },
    resolve:{
      item:  function(ItemsService, $stateParams){
        return ItemsService.getItem($stateParams.itemId);
      }
    },
    data:{ pageTitle: 'Buy' }
  });

这是控制器:

.controller( 'PurchasesCtrl', ['$scope', 'PurchasesService', '$stateParams', 'purchases', function (    $scope, PurchasesService, $stateParams, purchases ) {
  $scope.purchases = purchases.data;
  console.log("loaded");
  $scope.predicates = ['firstName', 'lastName', 'birthDate', 'balance', 'email'];
  $scope.selectedPredicate = $scope.predicates[0];
}])

.controller( 'PurchasesViewCtrl', ['$scope', 'PurchasesService', '$stateParams', 'purchase', function ( $scope, PurchasesService, $stateParams, purchase ) {
  $scope.purchase = purchase.data;
}])

我不知道它为什么一直这样做,但它很烦人,我想知道是什么问题。

1 个答案:

答案 0 :(得分:1)

这不是UI-Router的问题,而是与服务器相关的问题,其中当您刷新浏览器时它不会指向index.html

因此,您需要在Apache环境中托管您的页面并创建重定向,例如创建 .htaccess 文件

之前我将此作为问题,您可以从Github

追溯我的机票

区别仅在于我使用 Grunt 来投放我的应用,然后我创建了一个.htaccess以及我的index.html

这是我用来解决这个问题的.htaccess要点。 link