【问题标题】:pass cmsfn value to a scope variable angularjs将 cmsfn 值传递给范围变量 angularjs
【发布时间】:2017-12-30 11:42:21
【问题描述】:

我正在尝试将一个变量从cmsfn 传递给 angularjs。有人已经做到了吗?

    <div ng-controller="someController">
        [#assign currentNode = cmsfn.asJCRNode(content)]
        [#assign rootPageNode = cmsfn.root(currentNode, "mgnl:page")!]
       <div style="display: none">{{myVar='${rootPageNode}'}}</div>
    </div> 

在上面的代码中,当我尝试在角度中使用myVar 时,它的值为空。

【问题讨论】:

  • 要让这段代码工作,它需要通过渲染引擎。如果上面的 sn-p 在 .ftl 文件中,它应该可以正常工作,但如果它直接在作为资源一部分的 .js 文件中,则不会。你的文件在哪里,它是什么,资源还是模板?
  • 它是一个模板,文件位于 pages 文件夹中,在其他来源中,我正在尝试获取页面的名称以通过页面的名称访问页面的属性。如果您知道其他方法,请随时说些什么
  • 那么它应该可以正常工作了。顺便说一句,您可以跳过第一行。 root() 方法接受 ContentMapNode 作为参数。对您的问题的一种可能解释是,您传入的页面已经是网站的根目录(即没有任何父级的顶级页面),在这种情况下,方法将返回 null。
  • rootPageNode 有页面的名称,但我不知道如何将值发送到 angular,它似乎未定义,我如何访问 myVar? $scope.myVar?我应该在全球范围内声明它吗?

标签: angularjs freemarker magnolia


【解决方案1】:

首先,将您的 FM 代码减少为单行:

 [#assign rootPage = cmsfn.root(content, "mgnl:page")!]

这样,你得到的仍然是ContentMap,而不是Node,在模板中更容易操作。

其次,获取页面的名称(如果这是你想要的):

${rootPage.@name}

您可以在this page底部找到内容映射的其他特殊属性列表

现在,最后关于角度部分,您在模板中拥有的只是角度表达式,如果您愿意,可以使用“打印语句”,它不会分配变量。您需要在 someController 控制器本身中使用 $scope.myVar=... 进行分配。这意味着.js文件本身需要是freemarker模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    相关资源
    最近更新 更多