modèle dynamique de la directive en angularjs
J'ai besoin de décider de le modèle basé sur la date. J'ai vu un bon exemple.
Mais dans cet exemple, les modèles sont tellement simples qu'il pouvait s'en servir cordes. Dans mon cas, je veux utiliser le php pour produire les modèles, j'ai donc utilisé de cette façon:
eng.directive('vis', function ($compile) {
var getTemplate = function(ir) {
var k = (ir.visits.last && parseInt(ir.visits.last.done))?'V':'E';
var s = (ir.data.kind == 0)?'H':'V';
return s+k+'T';
}
var linker = function(scope, element, attrs) {
scope.$watch('ir',function(){
if (!scope.ir) return;
element.html(jQuery('#'+getTemplate(scope.ir)).html()).show();
$compile(element.contents())(scope);
})
}
return {
restrict: "E",
rep1ace: true,
link: linker
};});
et les modèles sont:
<div id=HVT style="display:none">
<p>horizontal view template</p>
</div>
<div id=HET style="display:none">
<p>horizontal {{1+5}} Edit template</p>
</div>
<div id=VVT style="display:none">
<p>vertical view template</p>
</div>
<div id=VET style="display:none">
<p>vertical Edit template</p>
</div>
Je suis sûr qu'il ya une façon plus intelligente.
est-il préférable d'utiliser templateUrl ? quelqu'un pourrait me dire comment l'utiliser dans mon cas?
Edit: il y a un problème. le modèle ne prend pas en voir la portée
OriginalL'auteur Aladdin Mhemed | 2013-03-14
Vous devez vous connecter pour publier un commentaire.
Cela est également possible pour la création de modèles dynamiques dans AngularJS:
Dans votre directive utilisation:
Maintenant votre contrôleur peut décider le modèle à utiliser:
Parce que vous avez accès à vos paramètres de portée, vous pouvez aussi faire:
De sorte que votre serveur peut créer un modèle dynamique pour vous.
function(el,attrs){ return '/tmpls/' + attrs.template; }
J'ai essayé la méthode ci-dessus, sa fonctionne très bien pour moi maintenant même j'ai le contrôle sur la navigation,le seul problème est que si je dois dynamique state (('manualTest/:nomtest', ) et je suis de retour d'état dynamique de la page, ng-init est appelé deux fois
OriginalL'auteur Ruud
J'ai trouver la solution ici
dans cet exemple http://jsbin.com/ebuhuv/7/edit
trouver ce code:
OriginalL'auteur Aladdin Mhemed
Angulaire, vous n'avez pas besoin d'utiliser
id
s. Aussi, au lieu dedisplay:none
vous pouvez utiliserng-show
:Votre $regarder de rappel (que vous pouvez définir sur un contrôleur ou dans une directive) puis il suffit de modifier la portée appropriée de la propriété:
Violon. Le violon a le code ci-dessus dans un contrôleur, depuis je n'ai aucune idée de l'endroit où vous pourriez être en utilisant la directive. Le violon viens aussi de code en dur "EFP", car je ne sais pas ce que
ir
ressemble.OriginalL'auteur Mark Rajcok