Javascript AngularJS+;用户界面路由器和页面刷新
我只有一个观点有这个奇怪的问题。问题是,每当我通过刷新(Cmd+R/F5)浏览器重新加载它时,整个应用程序都无法工作,直到我更改路线(手动或单击链接)。视图在呈现之前解析一些数据,我可以验证是否没有对服务器的任何请求。基本上,当我刷新时,我看到我的所有脚本都已加载,但我的控制器从未被调用(在那里有一个console.log),我也从未得到渲染的视图 这是州政府Javascript AngularJS+;用户界面路由器和页面刷新,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我只有一个观点有这个奇怪的问题。问题是,每当我通过刷新(Cmd+R/F5)浏览器重新加载它时,整个应用程序都无法工作,直到我更改路线(手动或单击链接)。视图在呈现之前解析一些数据,我可以验证是否没有对服务器的任何请求。基本上,当我刷新时,我看到我的所有脚本都已加载,但我的控制器从未被调用(在那里有一个console.log),我也从未得到渲染的视图 这是州政府 $stateProvider.state( 'purchases', { url: '/purchases',
$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;
}])
我不知道它为什么一直这样做,但这很烦人,我想知道问题出在哪里。这不是UI路由器的问题,而是与服务器相关的问题,在刷新浏览器时,它不会指向index.html 因此,您需要在Apache环境中托管页面,并创建重定向,例如创建.htaccess文件 我以前有过这个问题,你可以从 唯一不同的是,我使用Grunt为我的应用程序提供服务,然后我创建了一个.htaccess和我的index.html
下面是我用来解决这个问题的.htaccess要点 你有默认状态吗?与使用url“/”的类似。如果是这样的话,这个会开火吗?刷新时地址栏中的url是什么样的?url是相同的(正确的)。我有一个默认状态,它也不会呈现。未执行我的应用程序控制器。未启动的控制器是第二个,PurchasesViewCtrl,对吗?分裂的目的是什么?除此之外,您最初的PurchasesCtrl看起来更像一个服务,所以可能会将该部分移动到PurchasesService中。无论如何,您的代码看起来有点混乱,因此提供一个小提琴将有助于找到错误