2017-05-02 1 views
0

Je crée une application web et j'ai un problème avec l'obtention de valeurs à partir du texte d'entrée. Comment les obtenir des intrants?Angulaire, angularfire - obtenir de la valeur dans le contrôleur

var app = angular.module('app', ['ngRoute', 'firebase']); 

app.controller("AuthCtrl", function($scope, $firebaseObject) { 
    var ref = firebase.database().ref(); 
    $scope.data = $firebaseObject(ref); 
}); 

app.controller("AuthCtrl", ["$scope", "$firebaseAuth", 
function($scope, $firebaseAuth) { 
    $scope.login = function($scope) { 
    var login = ''; 
    var pass = ''; 

    $scope.authObj = $firebaseAuth(); 
    $scope.authObj.$signInWithEmailAndPassword(login, pass) 
    .then(function(firebaseUser) { 
     console.log("Signed in as:", firebaseUser.uid); 
    }).catch(function(error) { 
     console.error("Authentication failed:", error); 
    }); 
    } 
} 
]); 

LA SOLUTION: contrôleur incorrect utilisé. De AuthCtrl à loginCtrl tout fonctionne! Tout est parce que j'utilise ngRoute.

app.controller("logintCtrl", ["$scope", "$firebaseAuth", 
function($scope, $firebaseAuth) { 
    $scope.login = function($scope) { 
    var login = ''; 
    var pass = ''; 

    $scope.authObj = $firebaseAuth(); 
    $scope.authObj.$signInWithEmailAndPassword(login, pass) 
    .then(function(firebaseUser) { 
     console.log("Signed in as:", firebaseUser.uid); 
    }).catch(function(error) { 
     console.error("Authentication failed:", error); 
    }); 
    } 
} 
]); 
+0

Voir [Guide du développeur AngularJS - Formulaires (format simple)] (https://docs.angularjs.org/guide/forms#simple-form). * La directive [ngModel] (https://docs.angularjs.org/api/ng/directive/ngModel) fournit la liaison de données bidirectionnelle en synchronisant le modèle à la vue, ainsi que la vue sur le modèle. * – georgeawg

+0

Angular 1.6.3, Firebase 3.8.0, Angularefire 2.3.0 –

+0

Je suis ce qui suit: https://github.com/firebase/angularfire/blob/master/docs/guide/user-auth.md#signing- utilisateurs dans –

Répondre

0

Vous n'avez pas fourni le code HTML, mais je suppose Disons que vous avez une forme dans ce format

<form name="myForm"> 
<input type="login" ng-model="myForm.login"> 
<input type="password" ng-model="myForm.pass"> 
<input type="submit" value="Submit"> 
</form> 

maintenant vos js devrait

Prenez note de la nom de forme. Vous devriez également noter que Firebase n'accepte que email et une autre chaîne pour l'authentification. Ce qui signifie que la première chaîne doit être au format email

var app = angular.module('app', ['ngRoute', 'firebase']); 

app.controller("AuthCtrl", function($scope, $firebaseObject) { 
    var ref = firebase.database().ref(); 
    $scope.data = $firebaseObject(ref); 
}); 

app.controller("AuthCtrl", ["$scope", "$firebaseAuth", 
function($scope, $firebaseAuth) { 
    $scope.login = function($scope.myForm) { 
    var login = $scope.myForm.login; 
    var pass = $scope.myForm.pass; 



    $scope.authObj = $firebaseAuth(); 
    $scope.authObj.$signInWithEmailAndPassword(login, pass) 
    .then(function(firebaseUser) { 
     console.log("Signed in as:", firebaseUser.uid); 
    }).catch(function(error) { 
     console.error("Authentication failed:", error); 
    }); 
    } 
} 
]); 
0

Ne pas utiliser $scope comme argument dans la fonction $scope.login:

app.controller("AuthCtrl", ["$scope", "$firebaseAuth", 
function($scope, $firebaseAuth) { 
    //ERRONEOUS 
    //$scope.login = function($scope) { 
    //INSTEAD 
    $scope.login = function() { 
    var login = '[email protected]'; 
    var pass = '12345'; 

    $scope.authObj = $firebaseAuth(); 
    $scope.authObj.$signInWithEmailAndPassword(login, pass) 
    .then(function(firebaseUser) { 
     console.log("Signed in as:", firebaseUser.uid); 
    }).catch(function(error) { 
     console.error("Authentication failed:", error); 
    }); 
    } 
} 
]); 

En utilisant $scope comme premier paramètre du $scope.login, il masque la référence d'objet $scope injectée dans la fonction de construction du contrôleur.