gpt4 book ai didi

angularjs - 具有 Html5Mode 刷新页面问题的 Angular-UI-Router

转载 作者:太空宇宙 更新时间:2023-11-04 14:33:54 25 4
gpt4 key购买 nike

我有一个使用 angular-ui-routerhtml5mode(true) 的应用程序。在运行和路由到其他状态时,一切似乎都工作正常。

我的默认状态是 app/calendar,它是在 module.run() 期间设置的

但是,当我在其他路线(比如 app/profile)刷新页面时,它会将我带回 app/calendar。

调试时我注意到刷新页面后 $state.current 总是空的

Object {name: "", url: "^", views: null, abstract: true}

如果只有 $state.current 有值,我就可以转换到当前状态。

有什么我想念的吗?

希望有人能提供帮助。

我的服务器路由看起来像

app.get('/:var(/|app/calendar|app/customers|app/profile|app/settings)?', function(req, res) {
res.sendFile('/app/main/main.html',{ root: '../Appt/public' });
});

我总是提供同一个文件。

和我的前端状态配置

(
function()
{
angular.module('Appt.Main').config(['$stateProvider','$locationProvider',function($stateProvider,$locationProvider)
{
$locationProvider.html5Mode(true);

var calendar = {
name: 'calendar',
url: 'app/calendar',
controller: 'Appt.Main.CalendarController',
controllerAs: 'calendar',
templateUrl: '/app/main/calendar/calendar.html'
},
customers = {
name: 'customers',
url: 'app/customers',
controller : 'Appt.Main.CustomersController',
controllerAs : 'customers',
templateUrl : '/app/main/customers/customers.html'
},
profile = {
name: 'profile',
url: 'app/profile',
controller : 'Appt.Main.ProfileController',
controllerAs : 'profile',
templateUrl : '/app/main/profile/profile.html'
},
settings = {
name: 'settings',
url: 'app/settings',
controller : 'Appt.Main.SettingsController',
controllerAs : 'settings',
templateUrl : '/app/main/settings/settings.html'
};


$stateProvider.state(calendar);
$stateProvider.state(customers);
$stateProvider.state(profile);
$stateProvider.state(settings);

}]);

}
)();

我的module.run

(
function()
{
'use strict';

angular.module('Appt.Main',['ngRoute','ui.router','Appt.Directives'])
.run(['$state','$stateParams', function ($state,$stateParams) {
console.log('Appt.Main is now running')


console.log($state.current);
console.log($stateParams);

$state.transitionTo('calendar');


}])
}
)();

最佳答案

我不确定这是否能解决您的问题,但我遇到了一个非常相似的问题。我必须做的第一件事是使用 html5mode是使用重写属性,以便在我刷新页面时应用程序将从索引文件重新加载,无论是什么 $state我是。这是我使用的代码,但它可能会有所不同,具体取决于您使用的服务器端。

<IfModule mod_rewrite.c>
RewriteEngine On
#RewriteBase /relative/web/path/

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.+) - [PT,L]

RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^(.*) index.html

RewriteCond %{HTTP:Authorization} !^$
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
</IfModule>

您可以在此处的 docs from ui-router 中阅读更多内容

此外,您最好为您的应用设置基数或不使用基数。

您要么插入 <base href="/" >在您的 head 标签内(或其他基本文件夹,具体取决于您的结构)。

或者你可以使用:

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

因此您不必使用底座。

此外,您不需要 .run定义默认状态,ui-router可以用 $urlRouterProvider.when 来做或 $urlRouterProvider.otherwise你可以read more in the docs

由于我是 Angular 的新用户,这正是我为解决我的问题所做的,这与您的问题非常相似。希望对您有所帮助。

关于angularjs - 具有 Html5Mode 刷新页面问题的 Angular-UI-Router,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30409434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com