如果您了解 Facelets,那么它就不像简单的 JSP 包含或 Angular ng-include
,其中模板本身定义了模板中应包含的内容。
在 Facelets 中,模板只定义了它的哪些部分是动态的或可替换的,视图可以使用它并告诉模板的那些可替换部分中应该包含哪些内容。在 Facelets 中,一个页面可以在一个文件中提供模板的所有可替换部分。
面片示例:
模板:template.xhtml:
<h:body>
<div>
<ui:insert name="main_section">Main Section</ui:insert>
</div>
<div>
<ui:insert name="section">Section</ui:insert>
</div>
<div>
<ui:insert name="sub_section">Sub Section</ui:insert>
</div>
</h:body>
查看:somepage.xhtml
<ui:composition template="./template.xhtml">
<ui:define name="main_section">
Welcome to main section which is defined by this somepage.xhtml
</ui:define>
<ui:define name="section">
.. section as defined by this somepage.xhtml
</ui:define>
<ui:define name="sub_section">
.. subsection as defined by this somepage.xhtml
</ui:define>
</ui:composition>
这与常规包含模板不同,其中模板不允许页面定义模板的内容,除非它在模板中的确切使用位置。
ngInclude 示例
查看:main.html
<div>
<ng-include src="./somepage_main_section.html"></ng-include>
<ng-include src="./somepage_section.html"></ng-include>
<ng-include src="./somepage_sub_section.html"></ng-include>
<div>
问题
在ng-include
中,somepage.html
无法定义或提供模板的其他可替换部分。它必须将模板的所有部分分成多个文件并对其进行硬编码。
我知道 Facelets 在服务器端工作,而 ng-include 在浏览器端工作,但重要的是概念。尽可能地,我们希望在 AngularJS 中应用同样的概念。顺便说一句,我们正在使用 Play Framework,这意味着我们不能使用 Facelets。