具有尾部斜杠失败的AngularJS路由

时间:2014-03-13 21:06:21

标签: angularjs

我的路线看起来像这样且 有效

when('/videos', {
  templateUrl: 'partials/partial1',
  controller: 'MyCtrl1'
}).

但是,如果我将命名组添加到when:

when('/videos/:video_id', {
  templateUrl: 'partials/partial1',
  controller: 'MyCtrl1'
}).

当我尝试在浏览器中访问videos/1时, 无法正常工作

我在控制台中遇到了一堆错误:

Uncaught SyntaxError: Unexpected token < 

奇怪的是,我也收到了错误

Resource interpreted as Stylesheet but transferred with MIME type text/html:

并且控制台说它来自名为:

的文件
video_id:13

似乎video_id被解释为自己的文件?

3 个答案:

答案 0 :(得分:0)

我的印象是你只能使用路由名称,而不能使用模板名称。每当您使用:指定路由参数时,它都会存储在$routeParams;但是,我不认为有与模板名称一起使用的类似服务。如果是这样,错误就有意义了。

请记住,路径路径是URL中看到的向外路径。您不会以这种方式看到模板名称;这段代码的重点是连接它们。可能有一种方法可以重新构建您的应用程序,以便您可以执行您想要的操作,但每条路径只有一个部分,因为我认为这是最佳做法。

答案 1 :(得分:0)

您可能会收到该错误,因为您的服务器正在响应404或其他意外响应。根据{{​​3}},您甚至无法使用:为templateUrl指定路由参数,但您可以使用函数

  

templateUrl - {string = | function()=} - 返回a的路径或函数   应该由ngView使用的html模板的路径。

     

如果templateUrl是一个函数,将使用以下函数调用它   参数:

     

{Array。&lt; Object&gt;} - 从当前提取的路由参数   $ location.path()通过应用当前路线

所以你可以做到

var partial1UrlBuilder = function(routeParams) {
  return 'partials/partial1/' + routeParams.id;
};

...

when('/view1', {
  templateUrl: partial1UrlBuilder,
  controller: 'MyCtrl1'
}).

答案 2 :(得分:0)

when('/videos/:video_id', {
  templateUrl: '/partials/partial1',
  controller: 'MyCtrl1'
})

我也面临同样的问题,在部分解决问题之前为斜线添加前缀。