我正在创建一个NodeJs + AngularJS应用程序。我有存储在数据库中的酒店列表。我想根据酒店名称和基于属性ID的加载局部视图创建动态路线。
E.g在我的数据库中,我有:
HotelID HotelName
1 example hotel
2 second example hotel
3 third example hotel
在app.js我想要这样的东西
var hotelierApp = angular.module('hotelierApp', ['ngRoute', 'ngCookies', 'pascalprecht.translate', 'hotelierApp.services', 'hotelierApp.directives', 'hotelierApp.filters', 'hotelierApp.controller']);
hotelierApp.run(function ($rootScope) {
$rootScope.langId = 1;
})
hotelierApp.config(['$routeProvider', '$locationProvider', '$translateProvider',
function ($routeProvider, $locationProvider, $translateProvider) {
angular.forEach(hotels, function (hotel) {
$routeProvider.when(hotel.name.replace(" ","-"), { templateUrl: 'partials/property', controller: propertyCtrl });
});
angular.forEach(评论,功能(评论){ $ routeProvider.when(review.title.replace(“”,“ - ”),{templateUrl:'partials / review',controller:reviewCtrl}); });
$locationProvider.html5Mode(true);
$translateProvider.useStaticFilesLoader({
prefix: 'data/locale-',
suffix: '.json'
});
$translateProvider.preferredLanguage('en');
$translateProvider.useLocalStorage();
}
]);
这里的酒店/评论将是来自数据库的列表,通过进行api调用,我也希望将相应的ID作为路由参数传递给控制器。
我的应用程序中还有许多其他部分,我必须从数据库创建路径。
请帮忙。
此致 - Manoj
答案 0 :(得分:3)
没有理由你需要这样做。
我很确定你的路线可以被纳入像
这样的东西$routeProvider.when("/:id/:name", {
templateUrl: 'partials/property', controller: propertyCtrl })
然后使用$ routeParams获取控制器中酒店的名称。对于模板网址,您可以传递函数而不是字符串来解析您需要使用的模板的名称。
templateUrl:function(pathParms){...}
所以不需要使用angular.forEach。
答案 1 :(得分:0)
虽然这是使用另一台路由器:http://dotjem.github.io/angular-routing/在核心路由器中可以使用相同的东西。
以下是@mpm所说的内容:http://plnkr.co/edit/8XuJswpx0FucwMczWTHF?p=preview
在你的情况下,我认为Option1是最合适的,这是因为你谈到了生成的url pr。酒店,这让我觉得所有酒店的布局都有很大的相似性。
如果是这种情况,他们也可以共享模板,您可以使用酒店特定数据填充模板。