Javascript 在角度服务中接收函数的未声明变量
我开始学习Angular JS,并正在编写我在互联网上找到的教程: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
在一个服务中,有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个未声明的变量接收一个函数”哪些变量?