2013-05-30 37 views
0

我试图动态地将模板包含到我的index.html中。的index.html的一般结构为:AngularJS基于路线动态设置ngInclude的参数

<body> 

    <header ng-controller="Main"> 
    <section> 
     <!-- global stuff --> 
    </section> 
    <section ng-include="moduleName + '/views/menubar.html'"> 
     <!-- module-based stuff --> 
    </section> 
    </header> 

    <div id="view" ng-view></div> 

</body> 

样品URL

example.com/<app_name>/index.html#/<module_name>[/method_name] 

我无法弄清楚如何更新$scope.moduleName路由变化时。我的问题是双重的:

  1. 头的控制器主要,而不是与视图相关的控制器,所以我不能?更新$scope.moduleName从视图的控制器(因为和视图的控制器是兄弟姐妹)。

  2. ,我试过设置一个$scope.$on('$routeChangeSuccess',…),但显然是it is not notified of route changes

我想建立一个$ rootScope的。$监听者(如SO#15355346描述)的路径变化和广播到孩子,谁再发射备份他们的路线,这是广播回落所以它是可用的。但这似乎很令人讨厌。

而且我真的更喜欢将头保持在ng-view之外。

编辑我注意到$route.current.scopemodule_name命名的(可能是因为与路由的MODULE_NAME相关的控制器的名称是相同的)一个对象。我想知道如果我能够以某种方式使用该对象的名称...

回答

1

很难说如果没有完整的图片,代码中出现了什么问题。你展现的东西对我来说看起来很好。

请参阅this plunk我已创建显示执行此操作的能力。请注意,您还可以使用自定义属性来扩展路由对象,如moduleName此处:

$routeProvider.when('/page1', { 
     template: 'one', 
     controller: 'one', 
     moduleName: 'firstModule' 
    }); 
+0

是的!谢谢!很高兴知道我也可以在$ routeProvider中定义自定义属性。 – jacob