Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在角度服务中接收函数的未声明变量_Javascript_Angularjs - Fatal编程技术网

Javascript 在角度服务中接收函数的未声明变量

Javascript 在角度服务中接收函数的未声明变量,javascript,angularjs,Javascript,Angularjs,我开始学习Angular JS,并正在编写我在互联网上找到的教程: 在一个服务中,有3个未声明的变量接收一个函数,尽管我做了研究,但我不理解这个语法 代码: register = function(user) { return $http.post('/api/register', user).success(function(data){ saveToken(data.token); }); }; 整个服务的代码: (function () { angular

我开始学习Angular JS,并正在编写我在互联网上找到的教程:


在一个服务中,有3个未声明的变量接收一个函数,尽管我做了研究,但我不理解这个语法

代码:

register = function(user) {
  return $http.post('/api/register', user).success(function(data){
    saveToken(data.token);
  });
};
整个服务的代码:

(function () {

  angular
    .module('meanApp') // service qui dépend de ce module ?
    .service('authentication', authentication);

  // $inject : To allow the minifiers to rename the function parameters and still be able to inject the right services, the function needs to be annotated with the $inject property. The $inject property is an array of service names to inject.
  // https://docs.angularjs.org/guide/di

  authentication.$inject = ['$http', '$window'];

  function authentication ($http, $window) {


    var saveToken = function (token) {
      $window.localStorage['mean-token'] = token;
    };

    var getToken = function () {
      return $window.localStorage['mean-token'];
    };

    var isLoggedIn = function() {
      var token = getToken();
      var payload;

      if(token){
        payload = token.split('.')[1];
        payload = $window.atob(payload); will decode a Base64 string
        payload = JSON.parse(payload);

        return payload.exp > Date.now() / 1000;
      } else {
        return false;
      }
    };

    var currentUser = function() {
      if(isLoggedIn()){
        var token = getToken();
        var payload = token.split('.')[1];
        payload = $window.atob(payload);
        payload = JSON.parse(payload);
        return {
          email : payload.email,
          name : payload.name
        };
      }
    };

    //An interface between the Angular app and the API, to call the login and register end-points and save the returned token. This will use the Angular $http service
    register = function(user) {
      return $http.post('/api/register', user).success(function(data){
        saveToken(data.token);
      });
    };

    login = function(user) {
      return $http.post('/api/login', user).success(function(data) {
        saveToken(data.token);
      });
    };

    logout = function() {
      $window.localStorage.removeItem('mean-token');
    };

    return {
      currentUser : currentUser,
      saveToken : saveToken,
      getToken : getToken,
      isLoggedIn : isLoggedIn,
      register : register,
      login : login,
      logout : logout
    };
  }


})();

感谢您的解释

此代码示例与声明其变量不一致。在声明变量时使用
var
语句被认为是最佳实践,但在不运行严格模式时,可以省略
var

var register = function(user) {
      return $http.post('/api/register', user).success(function(data){
        saveToken(data.token);
      });
    };

  var  login = function(user) {
      return $http.post('/api/login', user).success(function(data) {
        saveToken(data.token);
      });
    };

   var logout = function() {
      $window.localStorage.removeItem('mean-token');
    };

put var and check it 
您通常应该在javascript文件的顶部使用
'use strict'
,因此不允许使用未声明的变量,因为浏览器正在严格模式下运行JS

大概是这样的:

(function () {
  'use strict';
  angular
    .module('meanApp') // service qui dépend de ce module ?
    .service('authentication', authentication);
[...]

它的简单身份验证函数返回一个对象,您可以在控制器中使用该对象,如:-“authentication.register”“有3个未声明的变量接收一个函数”哪些变量?