Question

Je pose une question similaire à cette question:

Était-ce utile?

La solution

the templateurl peut être une fonction également pour vérifier le type et renvoyer une autreAfficher et définir le contrôleur dans la vue plutôt que dans le cadre de la configuration de l'état.Vous ne pouvez pas injecter des paramètres au templateurl afin que vous puissiez utiliser TemplateProvider.

$stateProvider.state('home', {
  templateProvider: ['$stateParams', 'restService' , function ($stateParams, restService) {
    restService.getEntity($stateParams.id).then(function(entity) {
        if (entity.Type == 'first') {
              return '<div ng-include="first.html"></div>;
        } else {
              return '<div ng-include="second.html"></div>';
        }
    });
  }]
})

Autres conseils

Vous pouvez également faire ce qui suit:

$stateProvider
        .state('home', {
            url : '/{id}',
            resolve: {
                entity: function($stateParams, RestService) {
                    return RestService.getEntity($stateParams.id);
                }
            },
            template: 'Home Template <ui-view></ui-view>',
            onEnter: function($state, entity) {
                if (entity.Type == 'first') {
                    $timeout(function() {
                            $state.go('home.first');
                        }, 0);
                } else {
                    $timeout(function() {
                            $state.go('home.second');
                        }, 0);
                }
            }
        })
        .state('home.first', {
            url: '',
            templateUrl: 'first.html',
            controller: 'FirstController'
        })
        .state('home.second', {
            url: '',
            templateUrl: 'second.html',
            controller: 'SecondController'
        });

J'ai fini par faire du contrôleur à domicile un frère de la première et seconde, plutôt que d'un parent, puis si le contrôleur de la maison a-t-il un État à la maison.go à première ou à la deuxième en fonction des résultats de la résolution.

Utilisez le code vérifié pour une vue conditionnelle dans UI-Route

$stateProvider.state('dashboard.home', {
        url: '/dashboard',
        controller: 'MainCtrl',
       // templateUrl: $rootScope.active_admin_template,
        templateProvider: ['$stateParams', '$templateRequest','$rootScope', function ($stateParams, templateRequest,$rootScope) {
          var templateUrl ='';
          if ($rootScope.current_user.role == 'MANAGER'){
            templateUrl ='views/manager_portal/dashboard.html';
          }else{
            templateUrl ='views/dashboard/home.html';
          }
          return templateRequest(templateUrl);
        }]
      });

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top