Façons de déclarer une Fonction dans AngularJS Contrôleur (controllerAs approche)
- Je utiliser contrôleur approche au lieu de $champ d'application. J'ai quelques problèmes avec l'appel de méthode à partir de l'HTML. Donc, la question est que la façon dont de nombreux moyens existent à déclarer et appeler des fonctions dans cette approche.
d'abord: Si je veux faire s.th. au premier abord)
var vm= this ;
vm.dataOne=[];
function funcOne() {
myService.serviceFunc()
.then(function (response) {
vm.dataOne= response.data;
});
};
function activate() {
funcOne();
}
activate();
deuxième: (Si je veux initialiser une variable basée sur une fonction de la valeur de retour )
vm.dataTwo = function () {
doSomeThing();
}
- Est-il de toute façon?
-
Comment doit définir une fonction de contrôleur
qui sera appelée à partir de HTML, commeng-click = "ctrl.dataTwo()";
- lors de l'utilisation
controllerAs
format dans votre application, vous devez mettrevm
au lieu de $portée avant la fonction. si vous utilisez la fonction de contrôleur et de ne pas utiliser dansHTML
pas besoin d'ajoutervm
avant la fonction. - Exactement je ne ce. Dans le premier code que je n'ai pas utiliser vm puisque c'est comme privées, et sera appelé localement. Mais dans la deuxième code que j'ai utilisé de la vm.dataTwo depuis je veux accéder qu'à partir de HTML comme méthode publique. puis, à partir de HTML, j'ai appeler La touche ctrl.dataTwo() mais je ne sais pas pourquoi il ne veut pas être appelé. (myController que ctrl )
- pouvez-vous créer plunker?
- Les deux fonctions sont privés. Pour les utiliser, vous avez à faire
vm.funcOne = funcOne;
etvm.activate = activate;
. BTW, bravo à embrasser alias! Vous êtes un pas de plus vers nettoyeur de code. - La deuxième fonction qui j'ai dit dans le commentaire de la vm.dataTwo, pas activer(). Je veux dire quand j'utilise des vm.quelque chose de ce qui est public, sinon c'est du privé.
- Bonne Expérience!! Après l'exécution de plus en plus et de débogage, dans le dernier test que j'ai vu que, finalement, après des années 50, le point de rupture activé!!! Il semble que le problème est le serveur gros temps de latence. Je devrais le tester plus à se assurer qu'il n'y a pas d'anomalie à côté client des opérations. Mais je vais garder la question du corps et de répondre étant donné qu'il pourrait être utile pour d'autres car il a une bonne distinction entre les fonctions de contrôleur. Merci à tous.
Vous devez vous connecter pour publier un commentaire.
Fonctions de la manière que vous avez défini dans le privé:
Ils sont connus comme les déclarations de fonction. Actuellement, ils ne sont accessibles qu'à l'intérieur de votre contrôleur.
Pour être en mesure de les appeler, de les fixer au contrôleur afin qu'ils deviennent des variables de contrôleur:
Un avantage de cette approche est que vous pouvez définir des fonctions après le fait de les appeler, par opposition à la façon dont vous le faites avec
$scope
ou$this
. Ils sont reconnus par de levage, et appelé.Sur votre initialisation de la valeur retournée par une fonction, il vous suffit d'appeler:
Quelques références:
var nomfonction = function() {} vs fonction nomfonction() {}
Les députés d'en JavaScript
Angulaire Déclarations de Fonction, les Expressions de Fonction, et un Code Lisible
Angulaire Guide De Style
Premier chemin à l'aide ng-controller="cntrl que vm" syntaxe:
Deuxième chemin à l'aide controllerAs comme un des attributs de la directive:
Moyen de l'appel d'une fonction avec "contrôleur" de la syntaxe qui est définie dans le contrôleur, mais appelé en html:
Autre manière, l'utilisation de la fonction en tant que constructeur et d'ajouter des fonctionnalités à prototype
JS:
HTML: