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

  1. #1
    Membre confirmé
    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
    Points : 637
    Points
    637
    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.
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  2. #2
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    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).
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  3. #3
    Membre confirmé
    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
    Points : 637
    Points
    637
    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.
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

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

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    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.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  5. #5
    Membre confirmé
    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
    Points : 637
    Points
    637
    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.
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  6. #6
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    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" };
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  7. #7
    Membre confirmé
    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
    Points : 637
    Points
    637
    Par défaut
    Y a un probleme alors
    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.
    Pour ma part si je change input 2 ou ThirdCtrl input ou FourthCtrl alors ils changent tous les 3.
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  8. #8
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    T'as testé sur le plunker que j'ai linké ?
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  9. #9
    Membre confirmé
    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
    Points : 637
    Points
    637
    Par défaut
    oui avec chrome et IE. Bizarre !!!!
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  10. #10
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Effectivement je viens de tester sur Chrome et ça ne fonctionne pas correctement avec un objet

    Je poserai la question sur la mailing angular ce soir mais c'est absolument pas normal d'avoir 2 comportements différents en fonction du browser !
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  11. #11
    Membre confirmé
    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
    Points : 637
    Points
    637
    Par défaut
    Pour ma part Chrome et IE ont le meme fonctionnement
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

  12. #12
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    En fait l'héritage par prototype n'affecte que les primitives. Donc dans notre exemple il est normal d'avoir une différence de comportement entre message et data.message.

    Ce que je ne comprends pas toujours pas c'est comment j'ai pu obtenir un comportement différent hier soir dans mon FF, car aujourd'hui je le même comportement que toi dans tous mes navigateurs !

    J'étais ptet naze je sais pas.

    Donc au final, le comportement normal en 2-way databindings c'est que le même modèle est modifié quelque soit l'endroit où l'on se trouve (input 2, ou ThirdCtrl, peu importe). En fait le scope pointe sur le même objet dans les 2 cas, il est donc normal que l'objet soit modifié et que la vue rende la modification partout.
    Mais dans le cas où l'on va avoir $scope.message, il s'agit d'une primitive, et là c'est l'héritage par prototype de js qui s'applique.

    La bonne pratique conseillée est de toujours utiliser un objet pour rendre le modèle dans une vue.

    Donc toujours faire data.message et jamais message directement.

    En d'autres termes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    // Pas bien !
    $scope.prop1 = prop1;
    $scope.propN = propN;
     
    // Bien !
    $scope.obj = obj;
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  13. #13
    Membre confirmé
    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
    Points : 637
    Points
    637
    Par défaut
    Merci à toi c'est plus clair
    MCTS Microsoft.
    La conception : Prendre le temps pour gagner du temps.

+ 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