AngularJs Transmettant des données complexes de la directive
J'ai la directive suivante:
<div teamspeak details="{{data.details}}"></div>
c'est la structure de l'objet:
data: {
details: {
serverName: { type: 'text', value: 'my server name' },
port: { type: 'number', value: 'my port' },
nickname: { type: 'text' },
password: { type: 'password' },
channel: { type: 'text' },
channelPassword: { type: 'password' },
autoBookmarkAdd: { type: 'checkbox' }
}
}
et je veux générer un lien sur la base des données à l'intérieur de la data.details
objet.
Malheureusement, il ne marche pas puisque de toute façon je cann pas accès à toutes les valeurs intérieures de la details
objet, mais si je suis de passage-il d'une simple structure de données comme:
<div teamspeak details="{{data.details.serverName.value}}"></div>
Je peux y accéder par le biais {{details}}
.
Voici mon Code de la Directive:
App.directive('teamspeak', function () {
return {
restrict: 'A',
template: "<a href='ts3server://{{details.serverName.value}}:{{details.port.value}}'>Teamspeak Server</a>",
scope: {
details: '@details',
},
link: function (scope, element, attrs) {
}
};
});
Grâce
Vous devez vous connecter pour publier un commentaire.
Lire sur Angularjs site officiel explication :
De sorte que vous ne pouvez envoyer qu'une chaîne de caractères, à passer un objet, vous avez besoin pour mettre en place un bi-directionnelle liaison à l'aide de
=
.Et votre HTML se ressemble
object = '='
, parce que vous ne pouvez pas affecter une chaîne à un objet de typeObjectType
. Des suggestions sur la façon de le faire avec la Machine?Quelqu'un a demandé sur la façon de le faire sans les isoler de la portée, voici une solution:
<div teamspeak details="{{data.details}}"></div>
On peut même utiliser
$interpolate
si toutes les valeurs deattrs.details
devrait être de définir de façon dynamique angulaire {{...}} les expressions...scope.details = scope.$eval($interpolate(attrs.details)(scope));
(n'oubliez pas d'injecter
$interpolate
service dans votre directive)Remarque importante: je n'ai pas testé cette méthode angulaire 2.