Angularjs 基于$routeProvider解析的动态模板

Angularjs 基于$routeProvider解析的动态模板,angularjs,angularjs-routing,Angularjs,Angularjs Routing,我的应用程序中有一个url,需要根据解析调用的结果加载两个模板中的一个,如下所示: app.config(function($routeProvider) { $routeProvider. when('/someurl', { resolve: { someData: function(dataService) { var data = dataService.loadDat

我的应用程序中有一个url,需要根据解析调用的结果加载两个模板中的一个,如下所示:

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路由器。