web-dev-qa-db-fra.com

Liaison bidirectionnelle facultative sur la portée d'isolat pour la directive Angular

question

Je viens d'apprendre que vous pouvez avoir une liaison optionnelle "inversée" ou de rappel via:

scope: { parentScopeFunc: '&?' }

J'essaie de voir s'il existe un moyen de faire quelque chose de similaire avec la liaison bidirectionnelle.

scope: { optional2WayBoundProp: '=?' }

J'ai essayé avec les paramètres element & attrs de la fonction de liaison, mais j'ai ensuite perdu la liaison bidirectionnelle avec le parent. Cette méthode autorise uniquement les mises à jour parent-enfant. Alors je pourrais aussi bien utiliser le mécanisme de portée @.

éditer

J'ai trouvé cette question directive JS angulaire, modifiez une liaison de données à 2 voies dans la fonction de lien afin que cela réponde à la question principale concernant =?. Cependant, il ne résout pas la valeur non liée "facultative" telle que true ou false.

buts

Voici ce que j'essaie d'accomplir:

  • écrivez une directive de panneau qui transcende le contenu et est pliable en dehors de la zone d'en-tête:
    <my-panel> <transcluded-header-content/> <button ng-click="toggleCollapse()"/> <transcluded-body-content ng-if="isExpanded"/> </my-panel>

  • dans certains cas, je souhaite mettre en cache l'état réduit de l'instance de panneau dans une étendue parent (d'où la liaison bidirectionnelle où le contrôleur de la vue peut déterminer comment mettre en cache ces informations):

    <my-panel is-expanded="parentScopeProp">

  • dans d'autres cas, je peux simplement le déclarer sans le lier à une propriété de portée parent OR Je peux simplement ne pas le déclarer du tout, auquel cas il suppose qu'il est développé.

    <my-panel is-expanded="true/false">

Je comprends qu'en utilisant l'affectation =, Des expressions comme undefined, true & false ne peuvent pas être évaluées.

22
jusopi

'=?' est une affectation de portée valide à partir de ng 1.2.x ...

... quant à la possibilité d'avoir un moyen d'interpoler une expression à partir d'une liaison bidirectionnelle facultative, qui est toujours à gagner.

36
jusopi