我目前正在使用AngularJS和UI-Router进行状态管理,并在后端表达。
我目前启用了哈希爆炸模式,并且一直在尝试找到一种解决方案,允许您在地址栏中手动输入没有哈希爆炸的URL。
例如,而不是输入:
www.mysite.com /#!/第1页
我希望能够输入
www.mysite.com/page1
我试过启用html5Mode:
$locationProvider.html5Mode(true)
.hashPrefix('!');
但它仍然无法奏效。完成上述更改后,点击任意网址即可重新编写并更改'#!/ page1'到' / page1'。哪个好。
但是,使用' / page1'手动输入网址不起作用,并给出无效的路径错误。如果我用哈希爆炸键入它,即'#!/ page1'然后它工作,并重新写入URL作为' / page1'页面加载后。
那我在这里做错了什么?
我的州看起来像这样:
state('login', {
url: '/login',
templateUrl: 'login.html'
}).
state('parent', {
url: '/hello',
abstract: true,
template: '<ui-view/>'
}).
state('parent.home', {
url: '',
controller: 'SomeCtrl',
templateUrl: 'page.html'
}).
state('parent.file', {
url: '/bob',
controller: 'SomeCtrl2',
templateUrl: 'file.html'
})
答案 0 :(得分:4)
更新: 您的代码对我来说很好,我将失去经验,并认为这是一个服务器问题。
有几种方法可以解决这个问题,但据我所知它们只是服务器端。
using AngularJS html5mode with nodeJS and Express
How do I configure IIS for URL Rewriting an AngularJS application in HTML5 mode?
你不能直接进入路线的原因 - mywebsite.com/page1 是因为角度应用本身(位于index.html页面上)需要拦截/引导你到< b>我的空间的。这就是为什么你看到页面本身永远不会重新加载,视图只是在你的应用程序中发生变化。您也可以通过刷新页面来测试它。
你需要实现服务器端的一些东西,它接受你的请求(IE: / page1 )并将所有请求路由到index.html,Angular将负责其余的工作。
另外:当您使用#/ page1时,您仍在请求索引页面,angular会识别#并相应地路由
编辑:其他信息
答案 1 :(得分:1)
这是因为/hello
是服务器上的404。我的路线底部有一个笼子:
app.route('/*')
.get(function(req, res) {
res.sendfile(app.get('appPath') + '/index.html');
});
答案 2 :(得分:0)
在state('parent', {
url: '/hello/',
abstract: true,
template: '<ui-view/>'
})
示例:
$ echo "all to out" >&2
all to out
$ echo "all to err" >&2
all to err
$ echo "err to out" 2>&1
err to out
$ echo "out to err" 1>&2
out to err