Angularjs 基于$routeProvider解析的动态模板
我的应用程序中有一个url,需要根据解析调用的结果加载两个模板中的一个,如下所示:Angularjs 基于$routeProvider解析的动态模板,angularjs,angularjs-routing,Angularjs,Angularjs Routing,我的应用程序中有一个url,需要根据解析调用的结果加载两个模板中的一个,如下所示: app.config(function($routeProvider) { $routeProvider. when('/someurl', { resolve: { someData: function(dataService) { var data = dataService.loadDat
app.config(function($routeProvider) {
$routeProvider.
when('/someurl', {
resolve: {
someData: function(dataService) {
var data = dataService.loadData();
// data has a .type field that determines which template should be loaded
return data;
}
},
templateUrl: function(routeParams) {
// return a path based on the value of data.type in the someData resolve block
}
})
});
有没有一种方法可以让我根据someData解析返回的内容设置templateUrl?因此我找到了使用ui路由器的方法-感谢m59为我指明了方向 以下是如何使用ui路由器完成此操作:
app.config(function($stateProvider) {
$stateProvider
.state('someState'
url: '/someurl',
template: '<ui-view>',
resolve: {
someData: function(dataService) {
var data = dataService.loadData();
// data has a .type field that determines which template should be loaded
return data;
}
},
controller: function($state, someData) {
$state.go('someState.' + someData.type);
}
})
.state('someState.type1', {
templateUrl: 'someTemplate1.html',
controller: 'Type1Controller'
})
.state('someState.type2', {
templateUrl: 'someTemplate2.html',
controller: 'Type2Controller'
})
});
有一个父状态处理解析,然后根据它获得的信息重定向到子状态。子状态没有url,因此无法直接加载它们。是否有理由不创建两个不同的路由,并在需要时将解析重定向到另一个路由?顺便说一句,ui路由器被认为是Angular路由器更好的选择,即使Angular/ngRoute开发者也是如此。基本上,我显示的是一个项目的数据,该项目需要不同的控制器,具体取决于项目类型,我希望能够在不需要在url中输入项目类型的情况下完成这项工作。我认为有很多方法可以做到这一点。例如,您可以从resolve设置一个服务变量,然后让实例化的控制器/模板相应地响应。这只是有点混乱。我想知道今天在常规路由器中是否有解决方案,或者在没有在模板中使用ng include并在控制器中设置它的情况下,是否有必要使用ui路由器。