Forum Programmation.autre Angular - maj d'une vue

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
1
27
sept.
2014

Salut à tous,

Je cherche à mettre à jour un div de ma page qui contient un ng-repeat, il ce passe une chose étrange que je ne comprends pas.

Ma page html (au format jade):

    div(ng-controller="monController")
      div(ng-include="'partials/search.html'")
      div(ng-repeat="item in items")

L'appel de la fonction de mise à jour ce fait depuis le partial search.html, la fonction est bien appelé, mais la mise jour dans la vue ne ce fais pas, jamais !
Pour tester j'ai créé, sous le 3eme div, un bouton qui appel la fonction, et les items ce mettent à jour (selon une sélection complêtement arbitraire), mais pourquoi ? comment ? sur quel étagère avec ou sans le chandelier ? Est ce que toi tu sais ?

  • # mise a jour manuelle

    Posté par  . Évalué à 1.

    Ca depend comment tu assigne les items, dans certains cas, angular ne peut pas deviner que tu a modifie quelque chose, donc il faut lui dire de remettre la vue a jour.

    Comme ca par exemple:

    .controller('MonControler', ['$scope', '$timeout', function ($scope, $timeout) {
        setTimeout(function () { // angular peut rien deviner avec un setTimeout
         $scope.items = [1,2,3];
         $timeout(function () {$scope.$apply();}); // force angular a mettre a jour la vue
       }, 2000)
    });
    • [^] # Re: mise a jour manuelle

      Posté par  . Évalué à 1. Dernière modification le 28 septembre 2014 à 10:27.

      Yop,

      Ce qu'il ce passe c'est que ng-include créé un nouveau $scope enfant qui hérite du pére, du coup on a deux $scope distinct. Mes champs ng-repeat dans le scope parent et mes formulaire dans le scope enfant.

      Pour l'instant je n'ai pas encore réglé le probléme, je n'arrive pas à faire de modifications dans le scope parent, reste la solution: coder une directive include qui ne créé pas de nouveau scope que je vais mettre en place tout de suite.

      J'ai trouvé la réponse hier aprés avoir posté sur le forum, j'ai compris que l'élèment perturbateur était ng-include, les recherche ont étaient de suite plus fructueuse.

      Allez tous vous faire spéculer.

      • [^] # Re: mise a jour manuelle

        Posté par  . Évalué à 1.

        Aaah, je suis vraiment aveugle, j'avais pas vu le ng-include….

        Alors ce que tu pourrais faire c'est un truc style angular.element(".selecteur-qui-va-bien").scope() et tu auras le scope en relation avec l'element, il doit y avoir un moyen plus simple mais ca doit marcher.

        • [^] # Re: mise a jour manuelle

          Posté par  . Évalué à 1.

          et sinon tu peux aussi utiliser $parent depuis l'enfant dans la vue (aucune idee si c'est injectable par contre)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.