AngularJS erreur: TypeError: v2.connexion n'est pas une fonction
Je voudrais appeler la fonction de connexion lorsque je clique sur le bouton de connexion, mais obtiens le message d'erreur dans le titre. Quelqu'un peut-il point l'erreur dans mon script?
login.js le code ci-dessous:
JS:
/*global Firebase, angular, console*/
'use strict';
//Create a new app with the AngularFire module
var app = angular.module("runsheetApp");
app.controller("AuthCtrl", function ($scope, $firebaseAuth) {
var ref = new Firebase("https://xxxxx.firebaseio.com");
function login() {
ref.authWithPassword({
email : "xxxxx",
password : "xxxx"
}, function (error, authData) {
if (error) {
console.log("Login Failed!", error);
} else {
console.log("Authenticated successfully with payload:", authData);
}
});
}
});
HTML:
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.21/angular.min.js"></script>
Et le code de login.html est également ci-dessous:
HTML:
<div class="container" style="max-width: 300px">
<form class="form-signin">
<h2 class="form-signin-heading" style="text-align: center">Please Sign In</h2>
<input type="text" class="form-control" name="username" ng-model = "username" placeholder="Email Address" required="" autofocus="" />
</br>
<input type="password" class="form-control" name="password" ng-model = "password" placeholder="Password" required=""/>
</br>
<button class="btn btn-lg btn-primary btn-block" type="submit" ng-click="login()">Login</button>
</form>
</div>
Vous devez vous connecter pour publier un commentaire.
Dans mon cas, j'ai eu exactement le même problème que le vôtre. Toutefois, à venir à travers les gkalpak réponse à un tel scénario m'a beaucoup aidé.
S'est avéré être ce que j'étais en appelant était addBuddy() de la fonction, à partir d'un formulaire nommé "addBuddy". La solution a été de changer le nom de l'une des deux choses pour faire un stand-out ou dérivable à partir de l'autre. J'ai changé le nom de la forme de "addBuddyForm" et le tour est joué! Ma fonction a fonctionné!
Voici un extrait de mon cas:
Qui, j'ai changé pour:
...et cela a fonctionné! 🙂
function doComparison(v1, v2) { for (var i = 0, ii = predicates.length; i < ii; i++) { var result = compare(v1.predicateValues[i], v2.predicateValues[i]);
Edge cas ici, mais je tiens à le mentionner pour posterities amour. J'ai eu ce même message d'erreur lors de l'utilisation de la controllerAs le modèle avec une forme
name
avec la même valeur queng-submit
. Par exemple:<form name="authCtrl.signUp" ng-submit="authCtrl.signUp()">
Lance: TypeError: v2.l'inscription n'est pas une fonction
La solution a été de changer le nom de la forme de quelque chose de différent:
<form name="authCtrl.signUpForm" ng-submit="authCtrl.signUp()">
Dans AngularJS appeler la fonction de la vue, il doit être dans le $scope.
JS
HTML
Cela peut ne pas être spécifique à votre problème, mais j'avais aussi cette erreur et il a fallu un peu de comprendre pourquoi.
J'avais nommé à la fois une fonction et une variable de même, avec la variable assignée à la fonction, et donc l'affectation de la variable a été substitution de la fonction et il était en pleine explosion, une seconde manche.
Vous remarquerez que dans l'exemple de la uploadFile() comme un téléchargement.uploadFile = true; Ce fut une merveilleuse fichier qui a été destiné à être télécharger.uploadingFile - un indicateur utilisé pour contrôler le comportement d'un spinner. Une fois que cela a été résolu, le problème a disparu.
Exemple:
À être appelée à partir de la vue, une fonction doit être dans le $scope. Ajouter
pour le code JS du contrôleur.
Vous avez également besoin d'utiliser effectivement ce contrôleur. Changement
à
C'est tous les trucs. Mon conseil serait d'apprendre à partir d'un tutoriel AngularJS avant d'aller plus loin.
Deux de permettre la liaison, vous devez affecter votre fonction de connexion à $champ d'application. Remplacer votre code de fonction avec ceci:
Il peut être une réponse tardive par moi.
Mais Il travaille pour moi
Formulaire de vérification de nom que vous avez défini
par exemple ng-forme="login"
et le nom de la fonction
par exemple ng-click="login()"
Alors il ne fonctionnera pas . Vous devez changer l'un d'eux.
par exemple ng-forme="loginForm"
Explication:
AngularJS 1.x enregistre toutes les
form
élément du DOM qui a unname
propriété dans$scope
viaformDirectiveFactory
. Cette directive automatiquement instancieform.FormController
si ce qui précède est vrai:à partir de: angulaire.js:et 24 855
Donc si vous avez un
<form name=myForm>
il remplacera votre$scope.myForm = function() { ... }