Balise dynamique avec angularjs directive
Je voudrais créer un élément de la directive dans angularjs qui produit un élément html à partir d'un json blob passé comme un attribut. J'ai essayé assez peu de variations de la suite...
demoApp.directive("element", function() {
return {
restrict: "E",
scope: {
attributes: "@",
name: "@"
},
template:
function(name, attributes) {
var templateString = "<" + attributes.tag;
for (attribute in attributes) {
if (attribute != "name_displayed" && attribute != "tag") {
templateString += " " + attribute + "=\"" attributes[attribute] + "\"";
}
}
templateString += " name=\"" field + "\"";
templateString += ">";
templateString += "</" + attributes.tag + ">";
return attributes.name_displayed + ": " + templateString;
}(name, attributes)
};
});
Le code html ressemble à
<div ng-repeat="(name, attributes) in fields">
<element name="{[{name}]}" attributes="{[{attributes}]}"></element>
</div>
Où l'un des attributs d'objet json ressemble
{"name_displayed":"Agency","size":"30","tag":"input","type":"text"}
Et un nom ressemble
agency
Il semble que je ne peut pas utiliser une fonction pour un modèle, et aussi, il semble que je ne peut pas accéder aux attributs ou des objets de nom.
- Votre json est le premier problème. Le stockage de balisage des instructions dans un json (sans doute d'être sauvegardé sur le serveur) est bizarre...et je suis tenté de dire tout simplement ridicule. Même si vous avez besoin pour être en mesure de prendre une entrée de l'utilisateur et de la forme d'un modèle pour une sortie plus tard, vous enregistrez le modèle dans un fichier html, et non comme un json.
Vous devez vous connecter pour publier un commentaire.
Check this out: http://jsfiddle.net/es4Y6/1/
Je suppose que par "json blob" vous voulez dire, chaîne json. Si non, alors vous dire JS objet. Dans de tels cas, la mise à jour
$scope.fields
et supprimerangular.fromJson()
.Il fonctionne, cependant c'est une très mauvaise approche du problème que vous essayez de résoudre.
Vous pouvez mettre en œuvre votre logique dans
link
fonction au lieu d'unetemplate
. Essayez ceci:HTML
JavaScript
Ici est un exemple: http://plnkr.co/edit/B1RigXrzA2l1kIVNVXGw?p=preview