TypeError: ... is not a function

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J'ai un petit problème avec AngularJS.

J'essaye d'appeler une fonction (depuis un contrôleur) se trouvant dans un service mais Angular me retourne une erreur.

=> Elle se trouve dans une variable => var maVar = function() { //etc… };

J'ai essayé nomDuService.maVar(); mais j'ai une erreur du genre 'nomDuService.maVar();' is not a function

Je ne comprend pas pourquoi donc je fait appel à vous :)

Voici l'erreur :

Erreur AngularJS

Et le code :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
login.service("authentication", ["$http", "$window", function($http, $window) {

  var saveToken = function(token) { // Sauvegarde
    $window.localStorage["mean-token"] = token // Sauve le token en local
  };

  var getToken = function() { // Récupération
    return $window.localStorage["mean-token"];
  };

  var logout = function() { // Déconneion
    $window.localStorage.removeItem("mean-token");
  };

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

    if (token) {
      payload = token.split(".")[1]; // Split le token lors d'un "." et on retourne l'élément d'index [1]
      payload = $window.atob(payload);  // Décode
      payload = JSON.parse(payload); // Parse en JSON

      if (payload.exp > Date.now() / 1000) return true; // True si date n'est pas dépassée
    }
    else {
      return false;
    }
  };

  var currentUser = function() { // La fonction en question ==============================

    var token = getToken();
    var payload;

    if (isLoggedIn()) {
      payload = token.split(".")[1]; // Split le token lors d'un "." et on retourne l'élément d'index [1]
      payload = $window.atob(payload);  // Décode
      payload = JSON.parse(payload); // Parse en JSON
      console.log(payload);
      return {
        mail: payload.mail,
        lastname: payload.lastname
      };
    }
  };

  return { // On renvoi tout dans un objet
    saveToken: saveToken,
    getToken: getToken,
    logout: logout,
    isLoggedIn: isLoggedIn
  };
}]);

// Contrôleur home
login.controller("MainCtrl", function($rootScope, authentication) {
  $rootScope.title = "Bienvenue"
  $rootScope.sent = false;

  //console.log(authentication.isLoggedIn());

  $rootScope.isLoggedIn = authentication.isLoggedIn();
  $rootScope.currentUser = authentication.currentUser(); // ICI => TypeError: authentication.currentUser is not a function =======
});

Merci d'avance :D

+0 -0

Je dirais comme Victor (j'ai tout oublié d'angular mais ça devrait être ça), mais je voulais juste te demander si tu ne voudrais pas remplacer if (payload.exp > Date.now() / 1000) return true par return (payload.exp > Date.now() / 1000).
Parce que actuellement, ta fonction ne retourne rien si la date du token est dépassée. Avec les types nullables de JS, ça passe quand même dans la plupart des cas, mais…

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte