2016-11-09 5 views
0

Ich habe mit verschiedenen Anwsers ohne Glück versucht.UI Router verschachtelte Ansichten

Ich habe diese zwei ui-Ansichten:

<div ui-view class="expand"></div> //Inside index.html 

<div ui-view></div> //Inside home.html 

Und das ist mein Routing:

$stateProvider 
      .state('home', { 
       url: '/', 
       views: { 
        '@': { 
         templateUrl: 'app/components/home/home.html', 
         controller: 'HomeCtrl' 
        } 
       } 
      }) 
      .state('clients', { 
       url: '/clients', 
       views: { 
        '@home': { 
         templateUrl: 'app/components/clients/clients.html', 
         controller: 'ClientsCtrl' 
        } 
       }   
      }) 

Ich habe versucht, Namen für die Ansicht und rufen sie auf unterschiedliche Weise, aber Kunden setzen. html wird nie angezeigt, obwohl sich die Routen-URL ändert.

Antwort

1

Ich bin nicht vollständig vertraut mit der Ansichtssyntax, die Sie mit $stateProvider verwenden. Ich gebe Ihnen zwei Versionen, die erste wird Ihrem Beispiel sehr ähnlich sein und die zweite ist mehr mit Best Practices abgestimmt.

$stateProvider 
     .state('base', { 
      abstract: true, 
      url: '', 
      templateUrl: 'views/base.html' 
     }) 
     .state('login', { 
      url: '/login', 
      parent: 'base', 
      templateUrl: 'views/login.html', 
      controller: 'LoginCtrl' 
     }) 
     .state('dashboard', { 
      url: '/dashboard', 
      parent: 'base', 
      templateUrl: 'views/dashboard.html' 
     }) 

Best Practice Version:

(function() { 
'use strict'; 
angular 
    .module('app.core') 
    .config(stateConfig) 
    .run(errorHandler); 

stateConfig.$inject = ['$stateProvider', '$urlRouterProvider', '$locationProvider']; 
getZipCodes.$inject = ['googleMapService']; 
errorHandler.$inject = ['$rootScope', 'logger']; 

function stateConfig($stateProvider, $urlRouterProvider, $locationProvider) { 
    $locationProvider.html5Mode(true); 
    $urlRouterProvider.otherwise('/'); 

    $stateProvider.state('core', { 
     url: '/', 
     templateUrl: 'app/core/core.html', 
     controller: 'CoreController', 
     controllerAs: 'vm', 
     resolve: { 
      getZipCodes : getZipCodes 
     } 
    }) 
} 

/** @desc: Ping the back-end for a JSON object that will be converted into an array of NYC zip codes */ 
function getZipCodes(googleMapService) { 
    return googleMapService.getZipCodes(); 
} 

/** @desc: $stateChangeError handler */ 
function errorHandler($rootScope, logger) { 
    $rootScope.$on('$stateChangeError', function (error, event) { 
     if (error) { logger.error('Error while changing states', error); } 
     if (event) { logger.error('The event that caused the error', event); } 
    }) 
} 
})(); 
+0

Thank you! Durch Hinzufügen von "Eltern" funktionierte es – moondaisy

+0

Super! Ich bin froh, dass es funktioniert hat: D Wenn Sie etwas mehr Kredit wollen, würde ich versuchen, Ihre aktuelle Lösung zur Best-Practice-Version umzuformen. Hier ist ein Link als Referenz: https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md – richdotjs

+0

Ich wollte auch hinzufügen, dass es Sie auf jeden Fall eine Art von Fehler Handler an Ort und Stelle haben sollte . Es wird das Debuggen wesentlich erleichtern. Ich könnte mir vorstellen, dass Sie frustriert gewesen sein müssen, als Sie auf eine leere Seite ohne Fehlermeldungen geschaut haben. '$ rootScope. $ On ('$ stateChangeError', Funktion (Fehler, Ereignis) { if (Fehler) {logger.error ('Fehler beim Ändern der Zustände', Fehler);} if (event) {logger. error ('Das Ereignis, das den Fehler verursacht hat', event);} }) ' – richdotjs

Verwandte Themen