2013-11-22 31 views
6

我很抱歉如果我没有很好地解释自己,那么这里就是这样。基本上我无法解决这个问题。我正在使用Yeoman来生成我的角度项目。我有一个页眉和页脚,页脚将是静态的,页眉将需要它自己的控制器。我遇到的问题是,我并不特别希望标题在其他控制器之外。也许我错了,这实际上不是一个问题,最好的做法显然是在ng-view以外的标题?这是我到目前为止有:如何使用AngularJs处理页眉和页脚

<head> 
    <!-- head stuff here --> 
    </head> 
    <body ng-app="dscover.me"> 

     <div ng-include src="'partials/header.html'"></div> 

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

     <div ng-include src="'partials/footer.html'"></div> 
    </body> 

这是包括MainCtrl外的页眉和页脚的正确方法是什么?这对我来说是有道理的,因为如果我要创建一个新的控制器/页面,我仍然可以访问其外部的控制器?再次的问题是,我想避免使用rootScope,不幸的是,这似乎是唯一的方法,当标题在MainCtrl以外?

对于可怕的解释我很抱歉,但我希望你们明白。如果有更好的方法,请告诉我。任何帮助将不胜感激!

+0

你应该保持这种结构。如果你想要控制器交换数据,无论如何你都需要服务。而且您不希望每次视图更改时重新呈现标题。 – maxdec

+0

rootScope是使用事件模型在控制器之间进行通信的完全可接受的机制,其中控制器引发由其他控制器订阅的事件。 – Chandermani

+0

另一种选择是使用$ broadcast将消息发送到头部,但我同意,在这种情况下,使用rootScope没有任何问题。 –

回答

3

首先,我会尽量依赖AngularJS的给定功能。有三种方法可以实现在应用程序中的页眉和页脚:

  1. ng-include

为什么你想使用它的简单性和更少的代码的原因。从文档:

读取,编译和包括外部HTML片段

所以,简单地说包括HTML的外部片。

  • ng-view
  • 这是在角默认路由器(2.0)之前,有一个更好的选择称为ui-router

    UI-Router是由AngularUI team构建的AngularJS的路由框架。它提供了一种与ngRoute不同的方法,它根据应用程序的状态而不仅仅是路由URL来更改您的应用程序视图。

    它支持像嵌套视图等功能。使用它的主要原因是将这些视图的控制器和范围分开。在页眉和页脚方面,如果你想在里面有一个完全独立的逻辑,那就去做吧。

  • custom directive
  • 这个选项的情况下被使用,如果你有在主要内容的范围和页眉/页脚逻辑重叠。你也可以得到额外的好处,比如可重用性等。

    所以,您的选择挑一个,但不要偷懒搜索和阅读(herehereherehere)你写之前。