Sto studiando AngularJS e REST. Un esempio di codice utilizza ripetutamente la parola callback
in una funzione di autenticazione. La richiamata è una parola chiave in JavaScript o Angolare? O è callback
solo una variabile personalizzata creata in questo codice? In che modo callback
funziona nel codice qui sotto? Googling callback
e AngularJS non producono risultati utilizzabili. The code for the AngularJS module in question can be read at this link, che contiene anche tutto il codice per l'app di esempio.Come funziona il callback in AngularJS chiama al servizio REST?
Ecco il codice del modulo stesso:
angular.module('auth', []).factory('auth',
function($rootScope, $http, $location) {
enter = function() {
if ($location.path() != auth.loginPath) {
auth.path = $location.path();
if (!auth.authenticated) {
$location.path(auth.loginPath);
}
}
}
var auth = {
authenticated : false,
loginPath : '/login',
logoutPath : '/logout',
homePath : '/',
path : $location.path(),
authenticate : function(credentials, callback) {
var headers = credentials && credentials.username ? {
authorization : "Basic "
+ btoa(credentials.username + ":"
+ credentials.password)
} : {};
$http.get('user', {
headers : headers
}).success(function(data) {
if (data.name) {
auth.authenticated = true;
} else {
auth.authenticated = false;
}
callback && callback(auth.authenticated);
$location.path(auth.path==auth.loginPath ? auth.homePath : auth.path);
}).error(function() {
auth.authenticated = false;
callback && callback(false);
});
},
clear : function() {
$location.path(auth.loginPath);
auth.authenticated = false;
$http.post(auth.logoutPath, {}).success(function() {
console.log("Logout succeeded");
}).error(function(data) {
console.log("Logout failed");
});
},
init : function(homePath, loginPath, logoutPath) {
auth.homePath = homePath;
auth.loginPath = loginPath;
auth.logoutPath = logoutPath;
auth.authenticate({}, function(authenticated) {
if (authenticated) {
$location.path(auth.path);
}
})
// Guard route changes and switch to login page if unauthenticated
$rootScope.$on('$routeChangeStart', function() {
enter();
});
}
};
return auth;
});
ULTERIORI INFORMAZIONI:
In base alla risposta di @ okonyk, sto compreso il codice da un modulo differente che chiama il funzione auth.authenticate():
$scope.login = function() {
auth.authenticate($scope.credentials, function(authenticated) {
if (authenticated) {
//do some stuff
$scope.error = false;
} else {
$scope.error = true;
}
})
}
Quindi come funziona la chiamata da login()
a auth.authenticate($scope.credentials, function(authenticated)
? Il parametro function(authenticated)
invia un valore booleano che determina la funzionalità all'interno di auth.authenticate()
? Se è così, puoi essere esplicito? Posso metterlo insieme. Ad esempio, true potrebbe indicare di eseguire la richiamata, mentre false potrebbe indicare la nota per eseguire la richiamata, ma sarebbe utile farla spiegare. You can read the code in the sample app for the other module with the login()
method by clicking on this link.
OK, quindi come funziona 'callback' nel codice sopra? Ad esempio (tra gli altri) 'callback && callback (false);'? – CodeMed
'callback && callback (false);' - è un abbreviazione condizionale, che significa: 'se la richiamata è passata come parametro, che eseguirla mentre si passa' false' come parametro ' – oKonyk
Grazie. Ho aggiunto il codice alla fine dell'OP mostrando come viene chiamato il metodo 'auth.authenticate()', incluso un collegamento al codice chiamante nell'app di esempio su github. Sei disposto a spiegare in che modo il codice chiamante dalla funzione 'navigation.login()' funziona con la funzione 'auth.authenticate()'? Specificamente, sta inviando un valore vero/falso come secondo parametro? Da dove viene il vero/falso? E in che modo il vero o il falso influenzano il comportamento di 'auth.authenticate()'? Questa domanda ha uno scopo limitato in termini di codice github, ma mi sento ancora come se solo parzialmente capissi. – CodeMed