如何在函数之间使用变量

时间:2016-01-10 19:30:42

标签: javascript angularjs

我遇到了在函数之间使用变量的问题。正如您在下面看到的那样,User.username可用并且在注册页面上很好,但当您转到登录页面时,我告诉它首先提醒User.username的值,它是否提示未定义?我在这里很困惑。我很确定我在这里错过了一个概念。无论如何,非常感谢你!:

这是一个傻瓜:http://plnkr.co/edit/qB3Gkeq5ji1YQyy0kpGH

这是我的 script.js

app.controller("AuthCtrl", ["$scope", "Auth","$rootScope", 
  function($scope, Auth, $rootScope) {
var User = {}

      $scope.createUser = function(username, email, password) {
        $rootScope.usernames = username
        User.username = username
        $scope.message = null;
        $scope.error = null;
    var ref2 = new Firebase("https://uniquecoders.firebaseio.com/");
  ref2.createUser({
    email: $scope.email,
    password: $scope.password
  }, function(error, userData) {
    if (error) {
      switch (error.code) {
        case "EMAIL_TAKEN":
          alert("The new user account cannot be created because the email is already in use. Try to login");
          break;
        case "INVALID_EMAIL":
          alert("The specified email is not a valid email.");
          break;
        case "INVALID_PASSWORD":
          alert("The Specified Passowrd Is not valid.")
          break;
        default:
          alert("Error creating user:", error);
      }
    } else {
      alert("Successfully created user account with username" + User.username);

      window.location.hash = "/User"
    }
  });


      };

       $scope.logIn = function(){
         alert(User.username)
       $rootScope.usernames = User.username
        $scope.message = null;
        $scope.error = null;
        var ref2 = new Firebase("https://uniquecoders.firebaseio.com/");
        ref2.authWithPassword({
          "email" : $scope.logInemail,
          "password" : $scope.logInemailpassword

        }, function(error, userData){

          if(error){
            alert("Login Failed Because : " + error)
          }
          else{
            alert("Logged In!")
            window.location.hash = "/User"
          }

        })

      }

  /*  $scope.removeUser = function() {
      $scope.message = null;
      $scope.error = null;

      Auth.$removeUser({
        email: $scope.email,
        password: $scope.password
      }).then(function() {
        $scope.message = "User removed";
      }).catch(function(error) {
        $scope.error = error;
      });
    };*/
  }
]);

2 个答案:

答案 0 :(得分:0)

您必须记住,Web应用程序是Web服务器的浏览器之间的通信。浏览器和服务器可以在不同的机器上(即使它们在测试时不是。)

有两种方法可以完成这项工作

当浏览器和服务器通信时,一些信息被保存并在两端来回传递 - 这称为cookie。这是在页面之间保存数据的最常用方法。浏览器请求页面。当它收到服务器的回复时,它包含一个cookie。下次浏览器请求页面时,它会在其中包含cookie的请求。通过这种方式,服务器知道请求与先前的请求有关。

服务器非常智能,可以跟踪所有会话"由不同的浏览器。然后它保存有关该通信的会话数据 - 当它从同一浏览器获得下一个请求时,它会转到会话数据并检索有关该浏览器及其正在执行的操作的信息。 (通常这是用cookie完成的。)

答案 1 :(得分:0)

当页面重新加载时,重新执行整个javascript。因此,登录过程中填写的用户对象在登录功能中不再可用,因为在点击注册按钮时页面已重新加载 因此我们需要将用户名存储在cookie中,以便我们可以随时访问它。即使从javascript运行时删除它也会在浏览器缓存中出现 将密码存储在cookie中以解决安全问题存在风险。

成功注册后,将用户名保存在cookie中 像这样的事情

document.cookie ="username =" +username + "; " +"email ="+ email;

在登录功能中获取cookie值并检查用户的电子邮件是否与输入的相同

function getCookie(name ) {
   var pairs = document.cookie.split("; "),
   count = pairs.length, parts; 
   while ( count-- ) {
    parts = pairs[count].split("=");
    if ( parts[0] === name )
        return parts[1];
}
 return false;
}


var username=getCookie("username");
var email=getCookie("username");
if($scope.logInemail ==email)
  {
     alert(username);
  }