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 et rafraichissement


Sujet :

AngularJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut $scope et rafraichissement
    Bonjour

    Pourquoi dans un cas (message) tous se rafraichit et pas dans l'autre (data.message).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function FirstCtrl($scope) {
     
    }
    function SecondCtrl($scope) {
     
    }

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <div ng-app="">
      <input type="text" ng-model="message">
      <h1>{{ message }}</h1>
     
      <div ng-controller="FirstCtrl">
        <input type="text" ng-model="message">
        <h1>{{ message }}</h1>
      </div>
     
      <div ng-controller="SecondCtrl">
        <input type="text" ng-model="message">
        <h1>{{ message }}</h1>
      </div>
    </div>

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <div ng-app="">
      <input type="text" ng-model="data.message">
      <h1>{{ data.message }}</h1>
     
      <div ng-controller="FirstCtrl">
        <input type="text" ng-model="data.message">
        <h1>{{ data.message }}</h1>
      </div>
     
      <div ng-controller="SecondCtrl">
        <input type="text" ng-model="data.message">
        <h1>{{ data.message }}</h1>
      </div>
    </div>

    merci pour vos conseil.

  2. #2
    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
    Tu as du te planter.

    Petit plunker de démo.

    Tout se rafraichit dans tous les cas.

    Cela se rafraichit car les scopes héritent les uns des autres. Donc lorsque tu set ta valeur message (ou data.message) au niveau de l'app, les contrôleurs vont hériter de la valeur pour message (ou data.message).

  3. #3
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    Non tu verras que cela n'a pas le meme comportement.
    Tape un mot dans le 1er champ de saisie, puis dans le second et ainsi de suite ......

    Tu verras que dans un cas cela continura à rafraichir les autres champs mais pas dans l'autre.

  4. #4
    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
    J'ai mis à jour le plunker pour que l'affichage soit plus compréhensible et qu'on puisse en parler.

    Les scopes héritent entre eux sur la base du dom. Ils héritent tous du rootscope.

    Dans notre exemple la hiérarchie des scopes est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    rootscope > input 1 > FirstCtrl
    rootscope > input 1 > SecondCtrl
    rootscope > input 2 > ThirdCtrl
    rootscope > input 2 > FourthCtrl
    Lorsqu'un scope est modifié, ses enfants bénéficient de la modification via l'héritage par prototype de javascript.
    Cela signifie que si tu modifies input 1, FirstCtrl et SecondCtrl bénéficient de la modif, sauf s'ils ont eux même modifié la valeur.
    Donc si tu donnes comme valeur à input 1 "aaa", FirstCtrl et SecondCtrl vont prendre pour valeur "aaa". Mais si tu modifies SecondCtrl, en lui donnant pour valeur "bbb", seul ce scope aura cette valeur.

    J'espère que c'est plus clair.

  5. #5
    Membre éprouvé
    Avatar de topolino
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    1 901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 901
    Par défaut
    bof, on est bien d'accord que si
    tu changes la valeur de input 2 ou ThirdCtrl input ou FourthCtrl input alors input 2 et ThirdCtrl input et FourthCtrl input changent en meme temps.
    mais si tu changes la valeur de input 1 ou FirstCtrl input ou SecondCtrl input alors ca impecte que le input concerné.

    La seule difference c'est data.Message au lieu de message.

  6. #6
    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
    on est bien d'accord que si
    tu changes la valeur de input 2 ou ThirdCtrl input ou FourthCtrl input alors input 2 et ThirdCtrl input et FourthCtrl input changent en meme temps.
    Non !

    Si tu changes input 2, alors ThirdCtrl input ou FourthCtrl input prennent la même valeur que input 2, ça ok.
    Mais si tu changes ThirdCtrl input, seul ce dernier est affecté. Pareil pour FourthCtrl.

    C'est du à la hiérarchie des scopes et à l'héritage par prototype qui sert de base à cette hiérarchie.

    mais si tu changes la valeur de input 1 ou FirstCtrl input ou SecondCtrl input alors ca impecte que le input concerné.
    Non pas du tout. La hiérarchie basée sur input 1 est identique à celle basée sur input 2.

    La seule difference c'est data.Message au lieu de message.
    C'est une différence sur le contenu du modèle, dans un cas (message) tu as une propriété simple. Dans l'autre cas (data.message), tu as un objet qui a une propriété nommée message. Cela ne change rien du tout au fonctionnement de la hiérarchie des scopes et à l'héritage par prototype.

    Dans le cas de message tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $scope.message = "ta_valeur";
    Dans le cas de data.message tu as :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $scope.data = { message: "ta_valeur" };

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de rafraichissement d'un BDGrid
    Par marmotte dans le forum Bases de données
    Réponses: 10
    Dernier message: 28/05/2004, 18h07
  2. Rafraichissement de la fenetre pendant le traitement
    Par Bobx dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/02/2003, 15h13
  3. [VB6] [Datareport] Pb de rafraichissement
    Par Gadoul dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 06/02/2003, 10h06
  4. Toujours un problème de rafraichissement de DBGrid
    Par tripper.dim dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h15
  5. Timage rafraichissment
    Par Rizzla dans le forum Composants VCL
    Réponses: 5
    Dernier message: 16/09/2002, 17h08

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