如何从数据库dynamic添加路由到angularjs
我正在创build一个NodeJs + AngularJS应用程序。 我有酒店列表存储在数据库中。 我想根据酒店名称和基于属性ID的加载部分视图创builddynamic路线。
例如在我的数据库中,我有:
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(); }
]);
这里酒店/评论将通过api调用来自数据库的列表,同时我也希望将其相应的ID作为路由parameter passing给控制器。
我在我的应用程序中有许多其他部分,我必须从数据库创build路由。
请帮忙。
问候, – Manoj
你没有理由需要这样做。
我很确定你的路线可以被分解成类似的东西
$routeProvider.when("/:id/:name", { templateUrl: 'partials/property', controller: propertyCtrl })
然后使用$ routeParams获取控制器中的酒店名称。对于模板url,您可以传递一个函数,而不是一个string,它将parsing您需要使用的模板的名称。
templateUrl:function(pathParms){...}
所以不需要使用angular.forEach。
虽然这是使用另一个路由器: http : //dotjem.github.io/angular-routing/在核心路由器相同的东西是可能的。
这里是说明什么@mpm说你可以做: http ://plnkr.co/edit/8XuJswpx0FucwMczWTHF?p=preview
在你的情况下,我认为select1是最合适的,这是因为你谈论一个生成的url公关。 酒店,这使得我认为所有酒店的布局有很大的相似性。
在这种情况下,他们也可以共享模板,在这里您可以使用酒店特定的数据填充模板。