Studiuję AngularJS i REST. Próbka kodu wielokrotnie używa słowa callback
w funkcji uwierzytelniania. Czy wywołanie zwrotne jest słowem kluczowym w języku JavaScript lub Angular? Czy jest to tylko niestandardowa zmienna utworzona w tym kodzie? Jak działa callback
w poniższym kodzie? Googling callback
i AngularJS nie przynoszą użytecznych rezultatów. The code for the AngularJS module in question can be read at this link, który zawiera również cały kod przykładowej aplikacji.Jak działa wywołanie zwrotne w wywołaniu AngularJS do usługi REST?
Oto kod moduł sam:
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;
});
DODATKOWE INFORMACJE:
oparciu o użytkownika @ okonyk odpowiedzi, jestem w tym kod z innego modułu, który wywołuje Funkcja auth.authenticate():
$scope.login = function() {
auth.authenticate($scope.credentials, function(authenticated) {
if (authenticated) {
//do some stuff
$scope.error = false;
} else {
$scope.error = true;
}
})
}
Jak działa połączenie z login()
do auth.authenticate($scope.credentials, function(authenticated)
? Czy parametr function(authenticated)
wysyła wartość boolowską, która określa funkcjonalność wewnątrz auth.authenticate()
? Jeśli tak, czy możesz wyrazić się jasno? Mogę to połączyć. Na przykład prawda może wskazywać na wywołanie zwrotne, podczas gdy wartość false może wskazywać notatkę, aby wykonać wywołanie zwrotne, ale pomoże to wyjaśnić. You can read the code in the sample app for the other module with the login()
method by clicking on this link.
OK, więc jak działa "oddzwanianie" w powyższym kodzie? Na przykład (wśród reszty) 'callback && callback (false);'? – CodeMed
'callback && callback (false);' - jest skróconą warunkową, co oznacza: "jeśli callback został przekazany jako parametr, niż wykonać go, przekazując" false "jako parametr" – oKonyk
Dziękuję. Dodałem kod na końcu OP, pokazujący jak wywoływana jest metoda 'auth.authenticate()', w tym link do kodu wywołującego w przykładowej aplikacji na github. Czy chcesz wyjaśnić, w jaki sposób kod wywołujący z funkcji 'navigation.login()' działa z funkcją 'auth.authenticate()'? W szczególności, czy wysyła on wartość true/false jako drugi parametr? Skąd się bierze prawda/fałsz? I w jaki sposób prawda lub fałsz wpływa na zachowanie 'auth.authenticate()'? To pytanie ma ograniczony zasięg pod względem kodu github, ale nadal czuję, że tylko częściowo rozumiem. – CodeMed