2014-01-07 87 views
1

我正在使用Angular和ui-router。我无法启动嵌套控制器,但如果状态不是嵌套的,控制器将启动。AngularUI路由器:嵌套状态不启动控制器

该URL是从DnaNodeListCtrl模板生成的。该模板生成看起来像一个正确的URL: http://localhost:8080/#/v1/dnanodes/a9bfd497-ce6b-4832-909e-506a9b29e46e

我的代码如下。为什么我无法启动嵌套控制器?

config.js:

var dnaMgrApp = angular.module('dnaMgrApp', [ 
    'ngRoute', 
    'ui.router', 
    'dnaMgrControllers', 
    'dnaMgrRestService' 
]); 


dnaMgrApp.config(function($stateProvider, $urlRouterProvider) { 
    // 
    // For any unmatched url, redirect to /state1 
    $urlRouterProvider.otherwise("/"); 
    // 
    // Now set up the states 
    $stateProvider 
     .state('nodeList', { 
      url: "/", 
      templateUrl: 'templates/dnaNodeList.html', 
      controller: 'DnaNodeListCtrl' 
     }) 
     .state('nodeList.nodeDetail', { 
      url: "v1/dnanodes/:nodeId", 
      templateUrl: 'templates/dnaNodeSummary.html', 
      controller: function($scope){ 
       $scope.title = 'My DNA';} 
     }); 
}); 

模板:

<div id="body-container" > 
    </div><div id="tablediv"> 
     <div ng-repeat="node in dnaNodes"> 
      <div class="dnanode"> 
       <a ui-sref="nodeList.nodeDetail({nodeId:node.id})"> 
        <table> 
         <tr><td>{{node.geneName}}</td><td><img src="{{node.statusIcon}}"></td></tr> 
         <tr><td colspan="2">2 DNA Pathways</td></tr> 
        </table> 
       </a> 
      </div> 
      <br> 
     </div> 
    </div> 
</div> 

回答

3

UI路由器工作在该嵌套状态需要有相同的URL,你所定义的父状态+无论这样的方式你的嵌套状态。

如:

如果你有网址的状态父:/foo

然后定义嵌套链接的状态:/bar

然后,你必须有触发生成的URL嵌套状态是:

/foo/bar 

因此,您需要在您的子网址中添加/。

编辑 只需使用:

.state('nodeList.nodeDetail', { 
    url: "/v1/dnanodes/:nodeId", 
    templateUrl: 'templates/dnaNodeSummary.html', 
    //.... 
}); 
+0

该url由父代模板中的代码生成:ui-sref =“nodeList.nodeDetail({nodeId:node.id})” 添加斜杠只会改变添加到url的双斜杠:“http:// localhost:8080 /#// v1/dnanodes/27ae134e-1067-4788-a97d-0981deca2e53” – garyM

+0

@garyM您误解了我的意思,我的意思是在子状态的配置中添加一个斜杠。 –

+0

嗨巴巴,我确实把它放在创建双斜杠的子状态,并没有解决问题。我也试图在模板的修复中产生相同的双斜线,并且再次没有解决方案。我对这个原因感到困惑。 – garyM

0

父模板需要有一个地方来渲染子视图。具体来说,父模板至少需要有<ui-view/>。这在Nested States and Nested Views指南中有解释。