2016-11-09 142 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