Angular 路由结果为 404 - 无法获取
Angular route results in 404 - cannot GET
我正在尝试使用 angulars ui-router 设置 urls 以便我可以去一个基地 url 或者去一个相同的基地 url + 参数。所以 - 我可以转到 /test 或 /test/1,它将转到同一页面 - 唯一的区别是 url 参数。所以到目前为止我有这个:
.state('test', {
url: '/test',
templateUrl: 'views/test.html',
controller: 'testCtrl'
})
.state('testState', {
url: '/test/:id',
templateUrl: 'views/test.html',
controller: 'testCtrl'
});
/test
似乎工作正常,但是当我输入 test/1
时,它显示 cannot GET
。这是因为我手动输入 url 而不是使用 ui-路由器内部链接 (ui-sref)。我这样说是因为我注意到当我输入 /test
时,结果也是一样的。但是,当我使用通过 ui-sref 设置的页面上的链接时,测试和主页点击工作正常。我希望能够为 test/:id
共享 URL,因为这将是一个网络应用程序,登录的人可以在其中共享链接。
此外 - 是否有更好的方法将 test 和 testState 设置为 1 个状态?谢谢!
您的问题不在 Angular 端,而是您的服务器(我根据响应措辞猜测的节点)。 Node/express/whatever 不知道 test/1 的服务器文件。尝试放宽您的路由方案。我的意思是,设置代码以便对 test*
的任何请求解析为与 test/
相同的文件。这是 Express 应用程序中的示例:
/**
* For any GET that we can't resolve to a static file, assume it's
* an attempt to go to an angular route
*/
app.get('*', function(req, res){
res.sendfile(path_to_indexfile);
});
更新(讨论后):
或者你可以关闭 html5 模式——这样你就不用担心告诉你的服务器如何处理 /test/1
--angular 将使用 /test/#!/1
这应该不会引起问题。
有两种选择,使用一种状态“/test/:id”然后参数是可选的你可以调用/test/1或/test/。
如果你想启用 /test 你将需要另一个状态。
这是一个包含所有选项的 Plunker,有效。
正如 AlexMA 提到的那样,您似乎没有 post 有问题的代码,所以我无法修复您的示例。
此配置符合您的要求:
.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('view', {
url: '/view/:inboxId',
templateUrl: 'tpl.view.html',
controller: 'viewCtrl'
}).
state('view_root', {
url: '/view',
templateUrl: 'tpl.view.html',
controller: 'viewCtrl'
})
})
.controller('viewCtrl', function($scope, $state, $stateParams) {
$scope.state = $state.current;
$scope.params = $stateParams;
})
我正在尝试使用 angulars ui-router 设置 urls 以便我可以去一个基地 url 或者去一个相同的基地 url + 参数。所以 - 我可以转到 /test 或 /test/1,它将转到同一页面 - 唯一的区别是 url 参数。所以到目前为止我有这个:
.state('test', {
url: '/test',
templateUrl: 'views/test.html',
controller: 'testCtrl'
})
.state('testState', {
url: '/test/:id',
templateUrl: 'views/test.html',
controller: 'testCtrl'
});
/test
似乎工作正常,但是当我输入 test/1
时,它显示 cannot GET
。这是因为我手动输入 url 而不是使用 ui-路由器内部链接 (ui-sref)。我这样说是因为我注意到当我输入 /test
时,结果也是一样的。但是,当我使用通过 ui-sref 设置的页面上的链接时,测试和主页点击工作正常。我希望能够为 test/:id
共享 URL,因为这将是一个网络应用程序,登录的人可以在其中共享链接。
此外 - 是否有更好的方法将 test 和 testState 设置为 1 个状态?谢谢!
您的问题不在 Angular 端,而是您的服务器(我根据响应措辞猜测的节点)。 Node/express/whatever 不知道 test/1 的服务器文件。尝试放宽您的路由方案。我的意思是,设置代码以便对 test*
的任何请求解析为与 test/
相同的文件。这是 Express 应用程序中的示例:
/**
* For any GET that we can't resolve to a static file, assume it's
* an attempt to go to an angular route
*/
app.get('*', function(req, res){
res.sendfile(path_to_indexfile);
});
更新(讨论后):
或者你可以关闭 html5 模式——这样你就不用担心告诉你的服务器如何处理 /test/1
--angular 将使用 /test/#!/1
这应该不会引起问题。
有两种选择,使用一种状态“/test/:id”然后参数是可选的你可以调用/test/1或/test/。
如果你想启用 /test 你将需要另一个状态。
这是一个包含所有选项的 Plunker,有效。 正如 AlexMA 提到的那样,您似乎没有 post 有问题的代码,所以我无法修复您的示例。
此配置符合您的要求:
.config(function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/');
$stateProvider
.state('view', {
url: '/view/:inboxId',
templateUrl: 'tpl.view.html',
controller: 'viewCtrl'
}).
state('view_root', {
url: '/view',
templateUrl: 'tpl.view.html',
controller: 'viewCtrl'
})
})
.controller('viewCtrl', function($scope, $state, $stateParams) {
$scope.state = $state.current;
$scope.params = $stateParams;
})