Bonjour,

Je bute actuellement sur les services d'AngularJs. J'utilise une factory pour pouvoir faire passer la valeur d'un input du controller1 au controller 2 dans un exemple très simple. Ci-joint le code :

```
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>Le titre du document</title>
    <link rel="stylesheet" type="text/css" href="">
  </head>
  <body ng-app="principe">
    <div class="col-lg-10">
      <div ng-controller="controller1 as vm">
        <input ng-model="vm.entree" ng-blur="vm.modifier(vm.entree)"></input>      
      </div>
    </div>
    <div ng-controller="controller2 as vm" >
      {{vm.detailsRDV}}
    </div>
    <script type="text/javascript" src="angular-1.5.5/angular.min.js"></script>
    <script>
    var principe=angular.module('principe', []);
      principe.controller('controller1',['ShareDataService', function(ShareDataService){
        var vm=this;
        vm.entree="sdqsdqsd"
        vm.modifier= ShareDataService.envoiNom

      }])

      principe.controller('controller2',['ShareDataService', function(ShareDataService) {
        var vm=this;
        vm.detailsRDV = ShareDataService.recupereNom()
      }]) 

      principe.factory('ShareDataService', [function (ShareDataService){

          var obj={data: "Default Name"};
          recupereNom = function(){
            console.log(obj)
            return obj
          };
          envoiNom = function(entree){
            obj.data=entree
          };
          return{
          recupereNom: recupereNom,
          envoiNom: envoiNom
          }
        }
      ])

    </script>
  </body>
</html>
```

Ce qui me bloque se situe au niveau de ce que retourne ma factory. Dans le cas présent je retourne obj ce qui est bien répercuté dans le controller 2. Par contre si je mets obj.data dans le return cela marche à l'initialisation mais cela ne fonctionne plus par la suite.
Pourquoi ? Merci par avance de votre aide.

9 réponses


Maenhyr
Réponse acceptée

Les events etant globaux, je deconseille cette utilisation. La factory est le plus interessant.

Salut,

Pourquoi n'utilise-tu pas $rootScope pour temporairement transvaser tes data d'un controller à l'autre ?

Je suis parti de cette article qui explique les 3 possibilités (En existe t'il plus?) pour faire ça:

http://www.aurorasolutions.io/blog/angularjs-cross-component-communication/

Il semblerait que la solution du rootscope est quelques inconvénients.
Mais de toute façons je voudrais comprendre pourquoi dans mon cas je rencontre le problème énuméré.

ou alors au travers de l'heritage de controller avec les evenements angular ( $emit, $on, $broadcast ) qui te permet de dialoguer entre les controller enfant et parents

passe par les evenements angular ( $emit, $on, $broadcast ) ça te permet de dialoguer entre les controller plus facilement

@Defy Purée j'avais zappé les events, bien vu ! ;)

@betaWeb ca doit etre l'age ^^

Tu insinues que je suis vieux c'est ça ? :P

non mais je n'ai pas dit que tu étais jeune aussi ^^