2017-07-24 2 views
0

J'essaie de passer une variable à angularjs de cmsfn. Est-ce que quelqu'un a déjà réussi à le faire?passer cmsfn valeur à une variable de portée 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> 

Dans le code ci-dessus, lorsque je tente d'utiliser myVar dans angulaire, sa valeur est vide.

+0

Pour que ce code fonctionne, il doit passer par le moteur de rendu. Cela devrait fonctionner correctement si le snippet ci-dessus est dans le fichier '.ftl', mais pas si c'est directement dans le fichier' .js' qui fait partie des ressources. Où se trouve votre fichier et qu'est-ce que c'est, ressource ou modèle? – Jan

+0

c'est un modèle et le fichier est dans le dossier pages, à l'intérieur d'autres sources, j'essaie d'obtenir le nom de la page pour accéder aux propriétés de la page par le biais du nom de la page. Si vous connaissez un autre moyen de le faire, n'hésitez pas à dire quelque chose – pacheco

+0

Ensuite, il devrait fonctionner comme il est déjà. BTW vous pouvez passer la première ligne. La méthode 'root()' accepte à la fois 'ContentMap' ou' Node' comme paramètre. Une explication possible de votre problème est que vous passez dans la page qui est déjà racine du site (c'est-à-dire la page de niveau supérieur sans aucun parent), dans ce cas la méthode retournerait null. – Jan

Répondre

1

Alors d'abord, réduire votre code FM à une seule ligne:

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

De cette façon, ce que vous obtenez en retour est encore ContentMap et non Node qui est plus facile à manipuler dans le modèle.

En second lieu, obtenir le nom de la page (si c'est ce que vous voulez):

${[email protected]} 

Vous pouvez trouver la liste des autres propriétés particulières de carte contenu en bas de this page

Maintenant, dernier sur la partie angulaire, ce que vous avez dans votre modèle est juste expression angulaire, "déclaration d'impression" si vous voulez, ce qui n'attribuera pas de variable. Vous devez effectuer l'affectation à l'aide du $scope.myVar=... dans le contrôleur someController lui-même. Ce qui signifie que le fichier .js lui-même doit être un modèle Freemarker.