Besoin de votre aide. J'aimerais utiliser ma directive personnalisée avec des paramètres comme celui-ci:
<p customImage URL_PARAM="some_url.jpg" FIG_PARAM="Fig 1."></p>
Ma cible est d'utiliser les paramètres de la directive dans le modèle comme ceci:
.directive('customImage', function() { return { replace: true, template: '<div> <img src="URL_PARAM"> FIG_PARAM </div>' }; });
Comment faire celui-ci?
En fonction de ce dont vous avez besoin, vous souhaitez généralement créer une portée de la directive pour les frères et sœurs (c'est-à-dire une portée qui ne dépasse pas la portée hiérarchique normale, héritant des niveaux supérieurs) pour permettre à plusieurs directives de vivre dans le même niveau sans affecter chacune Autres propriétés. Si vous consultez l' entrée de la documentation AngularJS pour les directives , sous l'objet de la définition de la directive, vous pouvez voir trois liens de propriété différents que vous pouvez spécifier dans la définition de la portée de votre directive. Prenez cette définition de portée de votre directive, à titre d'exemple:
scope: { urlParamAttr: '@URL_PARAM', urlParamEval: '=URL_PARAM', urlParamFn:'&URL_PARAM' }
urlParamAttr
sur votre champ de directive sera liée à l'attribut HTML simple URL_PARAM
la directive. Ce sera toujours une chaîne car un attribut HTML est un nœud de texte et aura la valeur de some_url.jpg
some_url.jpg
et échouera car il n'est pas valable javascript. Si la directive a une valeur d'attribut de 'some_url.jpg'
, elle sera évaluée en tant que chaîne (en raison des guillemets). Si la portée définissant votre directive a une propriété appelée imageUrl
avec une valeur de some_url.jpg
(une chaîne) et la directive URL_PARAM
a la valeur imageUrl
, Angular va lier la propriété de votre directive à la propriété imageUrl
l'image de déclaration et la mettre à jour au fur et à mesure qu'elle change Un cycle de digest. on-click
, un utilisateur pourrait mettre une fonction personnalisée à partir d'une autre portée appelée Du champ d'application de la directive. Dans votre cas, vous pouvez traiter l'attribut comme HTML simple (et vous pouvez le modifier en fonction de vos besoins) et modifier votre modèle pour lier aux propriétés de la directive:
.directive('customImage', function() { return { replace: true, scope: { urlParam: '@URL_PARAM', figParam: '@FIG_PARAM' }, template: '<div> <img src="{{urlParam}}"/> {{figParam}} </div>' }; });