J'ai une directive d'attribut restreinte comme suit:
restrict: "A"
J'ai besoin de passer deux attributs; un nombre et une fonction / rappel, y accédant dans la directive en utilisant l' attrs
objet.
Si la directive était une directive d'élément, limitée avec "E"
je pourrais à ceci:
<example-directive example-number="99" example-function="exampleCallback()">
Cependant, pour des raisons que je ne vais pas aborder, j'ai besoin que la directive soit une directive attributaire.
Comment passer plusieurs attributs dans une directive d'attribut?
javascript
parameters
angularjs
attributes
directive
Undistraction
la source
la source
scope: false
), nouvelle portée (avec héritage prototypique normal, c'est-à-dire,scope: true
) et isoler la portée (c'est-à-dire,scope: { ... }
). Quel type de champ d'application votre directive crée-t-elle?Réponses:
La directive peut accéder à n'importe quel attribut défini sur le même élément, même si la directive elle-même n'est pas l'élément.
Modèle:
Directif:
fiddle
Si la valeur de l'attribut
example-number
est codée en dur, je suggère de l'utiliser$eval
une fois et de stocker la valeur. La variablenum
aura le type correct (un nombre).la source
Vous le faites exactement de la même manière que vous le feriez avec une directive d'élément. Vous les aurez dans l'objet attrs, mon exemple les a une liaison bidirectionnelle via la portée isolate mais ce n'est pas obligatoire. Si vous utilisez une portée isolée, vous pouvez accéder aux attributs avec
scope.$eval(attrs.sample)
ou simplement scope.sample, mais ils peuvent ne pas être définis lors de la liaison en fonction de votre situation.utilisé comme:
la source
Vous pouvez passer un objet comme attribut et le lire dans la directive comme ceci:
la source
{{true}}
mais il renvoie toujours la valeur de la chaînetrue
.Cela a fonctionné pour moi et je pense que c'est plus compatible HTML5. Vous devriez changer votre html pour utiliser le préfixe «data-»
Et dans la directive, lisez la valeur de la variable:
la source
Si vous "avez besoin" de 'exampleDirective' d'une autre directive + votre logique est dans le contrôleur 'exampleDirective' (disons 'exampleCtrl'):
la source