2016-11-09 179 views
0

我已經嘗試過沒有任何運氣的各種漫遊器。UI路由器嵌套視圖

我有這兩個UI-觀點:

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

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

這是我的路由:

$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' 
        } 
       }   
      }) 

我試圖把在視圖名稱,並呼籲他們以不同的方式,但客戶端。即使路由URL更改,html也不會顯示。

回答

1

我並不完全熟悉$stateProvider所使用的視圖語法。我會給你兩個版本,第一個看起來與你的例子非常相似,第二個版本更符合最佳實踐。

$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' 
     }) 

最佳實踐版本:

(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

謝謝!通過添加「父母」它的工作 – moondaisy

+0

太棒了!我很高興它的工作:D 如果你想要一些額外的功勞,我會嘗試重構你的當前解決方案到最佳實踐版本。這裏是一個可供參考的鏈接: https://github.com/johnpapa/angular-styleguide/blob/master/a1/README.md – richdotjs

+0

我也想補充一點,你應該肯定有某種錯誤處理程序到位。這將使未來的調試更容易。我想象一下,在查看沒有錯誤信息的空白頁面時,你一定被挫折感壓垮了。 (logger.error('Error while change states,error));} if(event){logger。錯誤('導致錯誤的事件',事件);} })' – richdotjs