2

我正在创建一个 NodeJs + AngularJS 应用程序。我有存储到数据库中的酒店列表。我想根据酒店名称和基于属性 ID 的加载部分视图创建动态路线。

例如,在我的数据库中,我有:

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(reviews, function (review) { $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();
}

]);

在这里,Hotels/reviews 将是通过调用 api 来自数据库的列表,并且我想将它们对应的 Id 作为路由参数传递给控制器​​。

我的应用程序中有许多其他部分,我必须从数据库中创建路由。

请帮忙。

问候, - 马诺伊

4

2 回答 2

3

您没有理由需要这样做。

我很确定您的路线可以考虑到类似

$routeProvider.when("/:id/:name", { 
templateUrl: 'partials/property', controller: propertyCtrl })

然后使用 $routeParams 在您的控制器中获取酒店的名称。至于模板 url,您可以传递一个函数而不是一个字符串来解析您需要使用的模板的名称。

templateUrl:function(pathParms){...}

所以不需要使用 angular.forEach。

于 2014-06-10T11:45:45.943 回答
0

虽然这是使用另一个路由器:http : //dotjem.github.io/angular-routing/ 在 tne 核心路由器中可以使用相同的东西。

这里说明了@mpm 说你可以做什么:http ://plnkr.co/edit/8XuJswpx0FucwMczWTHF?p=preview

在您的情况下,我认为 Option1 最合适,这是因为您谈论的是生成的 url pr。酒店,这让我假设所有酒店的布局都有很大的相似性。

在这种情况下,他们也可以共享模板,您可以在其中使用酒店特定数据填充模板。

于 2014-06-30T12:56:31.557 回答