Comment appliquer une fonction à un angularjs expression à l'intérieur d'un contrôleur?
simple question, je voudrais appliquer une fonction à l'intérieur de mon contrôleur de la portée d'une expression.
C'est mon code HTML à l'intérieur de mon contrôleur
<p><span ng-if="paginaDetail.pubdate !== '' ">Vanaf {{paginaDetail.pubdate}}</span></p>
C'est mon javascript
$scope.formatMysqlTimestampToHumanreadableDateTime = function(sDateTime){
sDateTime = sDateTime.toString();
var sHumanreadableDateTime = sDateTime.substring(8, 10) + "/" + sDateTime.substring(5, 7) + "/" + sDateTime.substring(0, 4);
sHumanreadableDateTime += " " + sDateTime.substring(11, 13) + ":" + sDateTime.substring(14, 16);
return sHumanreadableDateTime;
};
et ce que j'ai essayé de faire est d'appliquer formatMysqlTimestampToHumanreadabledatetime à paginaDetail.pubdate comme ce
<p><span ng-if="paginaDetail.pubdate !== '' ">Vanaf {{formatMysqlTimestampToHumanreadableDateTime(paginaDetail.pubdate)}}</span></p>
ou ce
<p><span ng-if="paginaDetail.pubdate !== '' ">Vanaf {{paginaDetail.pubdate|formatMysqlTimestampToHumanreadableDateTime}}</span></p>
mais les deux moyens ne sont pas corrects.
La première méthode fonctionne, mais sur la console j'ai cette erreur
Erreur: [$interpoler:interr]
http://errors.angularjs.org/1.2.16/$interpolate/interr?p0=Tot%20%7B%7BformatMysqlTimestampToHumanreadabledatetime(paginaDetail.endpubdate)%7D%7D&p1=TypeError%3A%20sDateTime%20is%20undefined
t/<@http://mysite.local/js/libs/angular.min.js:6:443
g/r@http://mysite.local/js/libs/angular.min.js:78:354
Yd/ce.$gethttp://monsite.local/js/libs/angulaire.min.js:106:161
Yd/ce.$gethttp://monsite.local/js/libs/angulaire.min.js:109:285
f@http://mysite.local/js/libs/angular.min.js:71:234
F@http://mysite.local/js/libs/angular.min.js:75:408
ve/http://mysite.local/js/libs/angular.min.js:76:457
et le second ne fonctionne simplement pas.
Avez-vous des suggestions? Merci beaucoup.
OriginalL'auteur axel | 2014-06-23
Vous devez vous connecter pour publier un commentaire.
Si je peux offrir une option de remplacement de contrôleur en fonction des actions... cela ressemble à un excellent scénario pour un filtre
L'idée est d'utiliser le filtre de l'entrée alors que c'est de la mettre dans le html comme
{{myDate|format}}
.Le filtre est défini comme:
Ou autre chose que vous voulez faire avec elle. De cette façon, vous pouvez le réutiliser sans avoir à mettre la fonction dans chaque contrôleur que vous souhaitez utiliser.
Voici un violon vous pouvez développer, pour vous allez.
modifier en Regardant de plus près l'erreur je pense que votre problème est que
.pubdate
n'est pas remplie (TypeError: sDateTime is not defined
). Essayer de mettre un point d'arrêt dans la fonction ou de voir ce que la console dit.input
et j'ai remarqué que si j'applique cette fonction à monpubdate
, la valeur est enregistré quatre fois, les deux premières fois cette valeur est undefined et les autres deux fois, c'est la valeur correcte. Je ne comprends juste pas pourquoi il est appelé quatre fois... la moindre idée? parce que je peux le résoudre comme celaif(typeof input === 'undefined'){return "";}
mais il n'est pas si intelligent que d'une solution...Angulaire de la garde en boucle sur les modèles de votre manette pour voir si il y avait des changements. C'est de cette façon les deux cas un engagement de travaux. Si vous avez chargé cette via AJAX ou toute autre méthode qui n'initialise pas la
.pubdate
valeur de la première fois angulaire des charges, il va aller à travers elle d'abord vide, puis rempli. Il sera plus d'une fois, en tout cas. Il est appelé le$digest
cycle. Je voudrais encore vous recommandons le filtre... Quelques infos sur digérer: onehungrymind.com/notes-on-angularjs-scope-life-cycleil est géré par l'intermédiaire d'une api ajax, vous avez raison, donc je suppose que cette case
if(typeof input === 'undefined'){return "";}
peut être ok. merci pour les liens!pas de soucis. bonne chance avec votre application
OriginalL'auteur Jorg
Fait votre exemple
{{func(param)}}
fonctionne très bien: http://jsfiddle.net/HB7LU/4418/. Le problème est dans quelque chose d'autre. Essayez de faire un violon illustrant votre problème.OriginalL'auteur gorpacrate
Cette question a déjà la réponse correcte, mais cela peut aider à mieux le comprendre. Pour la question "à courir/appliquer une fonction à l'intérieur d'un Angulaires expression", je peux introduire de cette façon,
Affecter votre fonction $champ d'application.quelque chose et le lancer. Exemple:
JavaScript à l'intérieur de votre contrôleur:
HTML (expression):
Vous obtiendrez
Hello!
à l'intérieur de votre<p>
tagOriginalL'auteur M98