【发布时间】:2016-09-28 11:07:24
【问题描述】:
我正在尝试通过运行 ajax 调用并在我的 RouteProvidor 上设置路由来将路由加载到我的 angularJS 应用程序中。以下是我的代码。
var app = angular.module('app', ['ngRoute']);
var appRouteProvider;
app.config(['$routeProvider', '$locationProvider',
function($routeProvider, $locationProvider) {
$locationProvider.html5Mode({
enabled: true,
requireBase: false
});
appRouteProvider = $routeProvider;
appRouteProvider.when('/', {
templateUrl : '../../app/templates/home.html',
controller : 'IndexController'
});
}]).run(function($http, $route){
url = siteApiRoot+'api/routes';
$http.post(url, jQuery.param([]), {
method: "POST",
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
}
).success(function(data){
for(i in data){
appRouteProvider.when(data[i].route, {
templateUrl : data[i].template,
controller : data[i].controller
});
}
console.log($route.routes);
});
});
console.log 向控制台输出一组正确的路由,这似乎表明路由已正确分配。但是,如果我要打开任何应该由路由处理的 url。什么都没发生。基本资产加载,即导航栏和页脚,它们始终保持不变,但从不调用路线的控制器。我在这里想念什么。
-- 更新
从技术上讲,我的路线遵循以下模式:
条目列表:
/<city>/<category>
/<city>/<subdistrict>-<category>
/<city>/<entry-slug>
我不确定如何很好地定义上述内容 - 基本上前两条路线将调用一个控制器和一个视图,而第三条将调用另一个。但是,我坚持如何在 AngularJS 中定义这种路由,前提是 etc 都是数据库中的 slug。几乎只剩下硬编码一组路线,但这似乎也不起作用。
另外,我还有其他静态页面 - 例如 /about /site/contact - 在此处路由时有点丢失。
【问题讨论】:
-
你的问题是Angular之前已经加载了所有的路由。您可能必须重新加载 routeService,但为什么您甚至必须通过 ajax 获取您的路线?对我来说,这听起来像是糟糕的设计。
标签: javascript angularjs