我尝试使用angulars ui-router设置网址,以便我可以转到基本网址或转到相同的基本网址+参数。所以 - 我可以去/ 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-routers内部链接(ui-sref)。我这样说是因为我注意到当我输入/test
时,它也是同样的事情。但是,当我使用ui-sref设置的页面上的链接时,测试和主页点击工作正常。我希望能够共享test/:id
的网址,因为这将是一个人们登录的网络应用可以共享链接。
此外 - 是否有更好的方法将测试和testState设置为1状态?谢谢!
答案 0 :(得分:1)
您的问题不在Angular方面,而在于您的服务器(节点我根据响应措辞进行猜测)。节点/表达/不知道哪个文件要服务于test / 1。尝试放宽您的路由方案。我的意思是,设置代码,以便任何请求,例如test*
解析为与test/
相同的文件。以下是快递应用中的一个示例:
/**
* 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
这不应该是{\ n}导致问题。
答案 1 :(得分:1)
有两种选择,使用一种状态" / test /:id"然后参数是可选的你可以调用/ test / 1或/ test /.
如果你想启用/测试,你需要另一个州。
这是一个包含所有选项的Plunker。 正如AlexMA所提到的那样,您似乎没有发布有问题的代码,所以我无法修复您的示例。
此配置适用于您的请求:
.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;
})