【发布时间】:2013-02-05 21:22:41
【问题描述】:
我正在尝试使用 Restful/Ruby 约定 /<resource>/[method]/[id] 构建我的应用程序。我以前在使用像 CodeIgniter 这样的服务器端 MVC 框架时是如何根据 URI 动态路由的:
例如
www.foo.com/bar/baz/1
然后应用程序将在控制器/类bar 中使用方法baz 并返回views/bar/baz.php(填充来自bar->baz 的数据)
我想在 Angular 中做同样的事情,但我不确定它是否支持这一点(如果支持,我不确定该怎么做)。目前我正在使用$routeProvider 的when 方法来指定每种情况。 $location.path() 看起来可能有我需要的东西,但我认为我不能在 app.js 中使用它(config() 内)。
我想做的是这样的:
.config([
'$routeProvider', function($routeProvider) {
$routeProvider
.when(//<resource> controller exists
resource+'/'+method, {
"templateURL": "views/" + resource + "/" + method + ".html",
"controller": resource
}
).otherwise({ "redirectTo":"/error" });
}
]);
并且路由器会自动调用相应的方法。
编辑另外,为什么当我指定when('/foo/bar', {…}) 时$routeProvider 会发疯?
EDIT 2 根据 Lee 的建议,我正在考虑做这样的事情:
$routeProvider
.when(
'/:resource/:method/:id', {
"templateUrl": function(routeParams){
var path = 'views/'+routeParams.resource+'/';
return ( typeof routeParams.method === 'undefined' ) ?
path+'index.html' : path+routeParams.method+'.html';
},
"controller": RESOURCE
})
.otherwise({redirectTo: '/error'});
我在$routeProvider 的文档中注意到以下内容:
templateUrl – {string=|function()=} – 返回一个 ngView 应该使用的 html 模板的路径。
如果 templateUrl 是一个函数,它会被如下调用 参数:
• {Array.
编辑:将templateUrl 设置为函数的选项是不稳定的1.1.2 构建的一部分:#1963(但它在 2013 年 2 月 7 日起不起作用) .
有一个关于在 AngularJS 的 Github 上添加此功能的讨论:#1193#1524,但我无法确定它是否实际实现(在上面引用的 Dash 文档中,它看起来已经实现了,并且网站上的文档尚未更新)。
EDIT 3为了澄清我想要发生的事情(根据李的要求),简单来说,我想去www.foo.com/index.html#/people
Angular 应该使用控制器 people,自动调用它的 index 方法,并且应该提供服务
./views/people/index.html
./views/people/map.html
另外,如果我去www.foo.com/index.html#/people/map
Angular 应该再次使用people 控制器,但这次会自动调用它的map 方法并提供...map.html(因为在url 中指定了地图)
./views/people/index.html
./views/people/map.html
那么,如果我去
www.foo.com/index.html#/widgets
Angular 应该提供服务
./views/widgets/index.html
./views/widgets/details.html
路由器的代码应该非常通用——我不应该为每条路由指定.when()。
【问题讨论】:
-
有趣的是,我现在在文档中看不到这一点。可能是更新的版本。
-
只是想了解您要完成的工作。我把它想象成/controller/template/id。你能举一个更具体的例子来说明你如何使用它吗?可能有一个更优雅的角度解决方案。
-
@Lee,是的,似乎 Dash 的文档版本比实际的文档站点更新(在我的问题中发布了屏幕截图)。对于您的第二条评论,我会在我的问题中添加更多内容(评论太多了)。
-
顺便说一句 - 我在 rest url convnetions 上找到了这个 (microformats.org/wiki/rest/urls) 信息,并将其用作我的第二个答案的指南。这是您的想法还是您有指向您要模仿的特定规范的链接?
标签: javascript ruby-on-rails angularjs rest url-routing