使用Firebase/AngularFire创建用户时遇邮箱参数无效错误求助
解决AngularFire创建用户时“email必须是有效字符串”的错误
这个错误的核心原因是你没有在$scope上预先定义绑定的表单属性,导致调用$createUserWithEmailAndPassword时,$scope.email和$scope.password是undefined,不符合Firebase要求的有效字符串参数。
原始代码的问题分析
你最初的HTML里直接用ng-model="email"和ng-model="password"绑定到$scope的顶级属性,但在homepageSignUp控制器里并没有初始化这些属性。在AngularJS中,直接绑定未定义的顶级$scope属性时,很容易出现值无法正确同步的情况——当你点击注册按钮时,Firebase拿到的其实是undefined,自然会抛出“必须是有效字符串”的错误。
你的修改方案是合理的(也是最优方案之一)
改用对象属性绑定是AngularJS表单处理的标准最佳实践,能避免很多绑定相关的坑,同时确保属性在控制器初始化时就存在,输入的值能正确同步到$scope中。
下面是修改后的完整代码:
HTML部分
<ion-view> <ion-content padding="false"> <div class="list list-inset"> <label class="item item-input"> <input type="text" ng-model="newUser.email" placeholder="e-mail"> </label> <label class="item item-input"> <input type="text" ng-model="newUser.password" placeholder="Password"> </label> </div> <div class="item item-divider text-center"> <a href="" class="button button-positive button-small" ng-click="registerUser(newUser)"> Enregistrez </a> </div> </ion-content> </ion-view>
JavaScript部分
'use strict'; app.factory("Auth", ["$firebaseAuth", function ($firebaseAuth) { return $firebaseAuth(); }]); app.controller('homepageIndex', function ($scope) { }); app.controller('homepageSignUp', ['$scope', 'Auth', function ($scope, Auth) { // 预先初始化绑定对象,确保属性存在 var newUser = $scope.newUser = { email: "", password: "" }; $scope.registerUser = function () { Auth.$createUserWithEmailAndPassword(newUser.email, newUser.password) .then(function (firebaseUser) { console.log("yas", firebaseUser); }).catch(function (error) { console.log("error"); }); }; }]);
额外说明
这种“把表单数据绑定到一个对象的属性”的方式,不仅解决了当前的参数无效问题,还能避免AngularJS中常见的原型继承覆盖问题,同时让代码的结构更清晰——所有表单相关的数据都集中在一个对象里,后续扩展(比如添加用户名、手机号等字段)也更方便。
内容的提问来源于stack exchange,提问作者R.Laburne
相关产品推荐
相关产品推荐

