IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

$scope n'est pas définie "AngularJs"


Sujet :

AngularJS

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2015
    Messages : 8
    Par défaut $scope n'est pas définie "AngularJs"
    Bonjour à tous,

    je suis vraiment perplexe, et j'espère que quelqu'un pourra m'aider.

    je construit une division "slide Pager" qui est dynamiquement construite selon la taille que je la donne dans une fonction JavaScript, voici a ce que ressemble:
    Nom : 2015-05-21_19h35_02.png
Affichages : 218
Taille : 2,5 Ko

    mais le problème c'est que j'attribue a chaque élément un événement |onclick="$scope.function()"| voici comment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    angular.module('MyApp', ['services']).controller('MyCtrlG', function($scope, $http, Logger) {
    	$scope.afficherPage=function(x){
    		 console.log("chui làà");
    	}
    }
    $scope.setPager=function(x){
    	var ul = document.getElementById('pager');
    	$scope.RemoveAllChild('pager');
    	var fp = document.createElement('li');
    	var lp = document.createElement('li');
    	var prev = document.createElement('li');
    	var next = document.createElement('li');
    	fp.setAttribute('class','first-page');
    	fp.innerHTML = '<a onclick="$scope.afficherPage(\'fp\')" href="#">&laquo;</a>';
    	ul.appendChild(fp);
    	prev.innerHTML = '<a onclick="$scope.afficherPage(\'prev\')" href="#" >&lsaquo;</a>';
    	ul.appendChild(prev);
    	n=x;     if(n>10) n=10;
    	for (var i = 1; i <= n; i++) {
    		var li = document.createElement('li');
    		if(i==1) li.setAttribute('class','active');
    		li.innerHTML = '<a onclick="$scope.afficherPage('+i+')" href="#" >'+i+'</a>';
    		ul.appendChild(li);
    	}
    	if(x>10){
    		var li = document.createElement('li');
    		li.innerHTML = '<p>.....</p>';
    		ul.appendChild(li);
    	} 
    	next.innerHTML = '<a onclick="$scope.afficherPage(\'next\')" href="#">&rsaquo;</a>';
    	ul.appendChild(next);
    	lp.setAttribute('class','last-page');
    	lp.innerHTML = '<a onclick="$scope.afficherPage(\'lp\')" href="#">&raquo;</a>';
    	ul.appendChild(lp);
    	return x;
    }	    
    });
    jusqu'à ici tout est parfait, mais quand je clique sur l'un des élément qui s'est apparait une erreur se déclenche on me disant "Uncaught ReferenceError: $scope is not defined"

    et j'essayais appeler ma fonction afficherpage() de différent manière:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     li.innerHTML = '<a onclick="$scope.afficherPage('+i+')" href="#" >'+i+'</a>';  // "Uncaught ReferenceError: $scope is not defined"
     li.innerHTML = '<a onclick="afficherPage('+i+')" href="#" >'+i+'</a>';            // "Uncaught ReferenceError: afficherPage() is not defined"
     li.innerHTML = '<a ng-click="$scope.afficherPage('+i+')" href="#" >'+i+'</a>'; // rien ne s'affiche ni erreur ni résultat 
     li.innerHTML = '<a ng-click="afficherPage('+i+')" href="#" >'+i+'</a>';           // rien ne s'affiche ni erreur ni résultat
    merci pour tout réponse.

  2. #2
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    Salut,

    $scope n'est pas à utiliser dans les templates (html), que dans les controleurs.
    Et ton code pique un peu... je te conseillerais de faire les tutoriaux du site officiel : tuto angularjs.org
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 40
    Par défaut
    au lieu de sa:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    li.innerHTML = '<a onclick="$scope.afficherPage('+i+')" href="#" >'+i+'</a>';
    essai sa:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    li.innerHTML = '<a onclick="afficherPage('+i+')" href="#" >'+i+'</a>';
    Et ton onclick tu peux le remplacer par ng-click...qui appartient a angular..

  4. #4
    Membre émérite Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Par défaut
    Ce n'est pas la peine de construire le html (le template) en javascript. Pourquoi ne pas l'écrire directement dans du html et afficher les portions qui t'intéressent selon des conditions (ng-if, ng-show...) ?
    De plus, pour ton besoin, il existe de nombreuses directives pour la pagination (que ce soit pour des tableaux de données ou autres).
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  5. #5
    Expert confirmé
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 419
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 419
    Par défaut
    1- Le controler ne doit servir qu'à binder les données dans le scope et les instances des services (les services doivent contenir 95% de la logique de ton appli)
    2- On ne doit pas implémenter de fonctions dans le scope mais dans les services car implémenter dans le scope rend ce code non testable et difficilement mutualisable
    3- On ne modifie jamais le DOM dans un controler (rôle des directives).

Discussions similaires

  1. Réponses: 24
    Dernier message: 01/06/2007, 09h26
  2. Réponses: 8
    Dernier message: 11/07/2006, 17h27
  3. [MySQL] Echange de valeurs dont le nombre n'est pas défini
    Par Diafwl dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 31/01/2006, 10h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo