html子元素中的grails/sitemesh布局设置属性(ng-app)

Posted

技术标签:

【中文标题】html子元素中的grails/sitemesh布局设置属性(ng-app)【英文标题】:grails/sitemesh layout set attribute (ng-app) in html child element 【发布时间】:2013-06-13 14:55:49 【问题描述】:

我有几个页面共享一个布局。我正在添加一些将使用 Angular 的新页面。我正在尝试找出如何设置模板,以便在子页面中添加html 元素属性ng-app='xyz'

例如

_layout.gsp

<html lang="en"  >

很想只做 child.gsp -

<html ng-app='angularApp'>
<meta name="layout" content="layout">

但是,这行不通。有什么简单的方法可以实现这一目标吗?

有没有办法使用内容模式?我试过了……

//child.gsp
<meta name="angularApp" content="angularApp"/>

//layout.gsp
<html lang="en" <%  meta(name: 'angularApp')? "ng-app='$meta(name: 'angularApp')'":"" %> >

但它只是没有结果......

【问题讨论】:

如果您在_layout 模板上添加ng-app='angularApp',那不应该提供给儿童吗? 不同的子gsps需要不同的ng-apps吗? 我没有,但我想要灵活性... 按照@ivar 的回答,您最终会为所有子页面复制相同的ng-app,尽管它会运行良好。一般来说,如果您只有一个ng-app,那么您可以按照我在回答中提到的方式进行操作。 【参考方案1】:

在您的视图正在使用的 _layout.gsp 中:

<html lang="en" $pageProperty(name:'page.ngapp') > ...... </html>

然后您将能够更改使用先前布局的后续 gsp 视图中的值:

<content tag="ngapp">ng-app='angularApp'</content>

编辑: 在我使用的较新版本的 grails (2.4.4) 中,我必须指定不带引号的属性 - 值组合:

<content tag="ngapp">ng-app=angularApp</content>

最终呈现的视图将具有您想要的任何内容:

<html lang="en" ng-app="angularApp" > ..... </html>

【讨论】:

像魅力一样工作......如此简单。谢谢。【参考方案2】:
//layout.gsp
<html lang="en" ng-app="angularApp">

//child.gsp
<meta name="layout" content="layout"/>

Angular 应用程序将被注入主(父)布局,并在需要时可用于所有子视图。如果您对单页应用程序感兴趣,也可以使用ng-view

【讨论】:

我不关注这个?这不是“总是”在 child.gsp 页面中吗? @Nix 是的,您可以在子 gsp 页面中访问 Angular 应用程序,但如果您已经在主布局中注入了应用程序,则不必在每个子页面上注入 Angular 应用程序。如果子页面使用layout.gsp 的内容,$scope 将在子页面中可用。 我在您的代码中没有看到任何注入。我读了这篇文章,因为所有布局都将具有 ng-app='angularApp' 属性。 @Nix 对不起,我的意思是“引导”而不是“注入”。是的,这正是目标。如果我们只有一个 Angular 应用程序供 gsps 使用,则在布局中引导应用程序并在子 gsps 中访问应用程序,而不是在每个子页面上使用 ng-app 这不是我需要的。我有条件地想在子页面中设置它。

以上是关于html子元素中的grails/sitemesh布局设置属性(ng-app)的主要内容,如果未能解决你的问题,请参考以下文章

高度塌陷

Flexbox布局(转)

flex布局之flex-shrink

无法在spring boot data rest中直接发布到子资源

jQuery 获取除子元素 X 之外的子元素的 HTML

jquery怎么在父元素事件中禁止子元素的事件?