Javascript 角度路由导致404-无法获取

Javascript 角度路由导致404-无法获取,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我正在尝试使用angulars ui router设置url,这样我就可以转到一个基本url或一个相同的基本url+参数。所以-我可以转到/test或/test/1,它将转到同一个页面-唯一的区别是url参数。到目前为止,我有一个: .state('test', { url: '/test', templateUrl: 'views/test.html', controller: 'testCtrl' }) .state('testState', { url:

我正在尝试使用angulars ui router设置url,这样我就可以转到一个基本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
时,它会显示
无法获取
。这是因为我手动输入url,而不是使用ui路由器内部链接(ui sref)。我这样说是因为我注意到,当我只是键入
/test
时,它也是一样的。但是,当我使用使用ui sref设置的页面上的链接时,测试和主页点击工作正常。我希望能够共享
test/:id
的URL,因为这将是一个web应用程序,登录的人可以在其中共享链接


还有-是否有更好的方法将test和testState设置为1状态?谢谢

您的问题不在角度方面,而是您的服务器(我根据响应措辞猜测节点)。Node/express/whatever不知道要将哪个文件发送到服务器进行测试/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/

如果要启用/测试,则需要另一个状态

这是一个包含所有选项的示例,正在运行。 正如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;
})

谢谢你的回答,是的,它是节点!我不太明白你所说的放宽路由方案是什么意思,你能详细说明一下吗?我现在正在使用grunt任务(grunt connect)来运行一个小的本地开发服务器;我加了一个例子。把它放在服务静态文件的代码后面,这样你就不会破坏一切:)我现在只是在使用grunt任务-甚至没有设置server.js,你知道任务本身是否有处理它的方法(grunt connect)?或者可能有更好的任务来测试这些东西-我只想能够键入一个动态url(本地)并找到它,ui路由目前似乎不喜欢这样。谢谢在这种情况下,我建议关闭html5模式并使用hashbang语法。这样,您就不必担心告诉服务器如何处理
/test/1
——angular将使用
/test/#/1
这不应该引起问题。正是因为这个原因,我更喜欢hashbang语法而不是html5模式。