ugrás a tartalomhoz

Angular js megosztott adat nem frissül

gtoma · 2014. Júl. 16. (Sze), 08.20
Sziasztok!

Egy alkalmazást csinálok, és gondoltam kipróbálom az AngularJS-t.
Sajnos belefutottam egy problémába, amire nem találom a megoldást.

Van egy tabos ablakom, ahol az első tab-on egy teljesen más controller van, mint a többin. Sajnos az <ul><li> kötött kód felépítésétől nem tudok eltérni, így minden LI-n definiálnom kell, hogy az a USER controllerhez tartozik.
Azaz:
  1. <li ng-controller="valami más">...</li>  
  2. <li ng-controller="user">  
  3.      <button ng-click="adatlekeres()">Adatok</button>  
  4.      adat csoport 1  
  5. </li>  
  6. <li ng-controller="user">adat csoport 2</li>  
  7. <li ng-controller="user">adat csoport 3</li>  
Az adat megosztáshoz a factory-t használom. Teljesen jól működik. Ha gépelek valamit, akkor a másik fülön is láthatók a szükséges adatok.
Azonban, ha ajaxban le akarom lekérni egy adott user adatait, nem frissül a factory, így a többi fül sem. Csak az a fül -azaz az a kontroller, ahol a belépést intézem, frissül. Az újonnan lekért adatokat a többi fülön nem kapja meg a controller. :(

Íme a kód részlet:
itt
(nem működik, egyszerűsítve van, de jobban érthető mintha nem lenne)

Hogy tudnám frissíteni globálisan az adatokat?
 
1

Factory

Poetro · 2014. Júl. 16. (Sze), 14.23
Magat a frissitest is a factory-ban kellene csinalni, es onnan lekerdezni az adatokat. Ekkor mindig szinkronban lesznek.
2

próbáltam

gtoma · 2014. Júl. 17. (Cs), 10.36
Ilyesmit:
  1. mcAngular.factory('userData', ['$http''$rootScope'function($http, $rootScope) {  
  2.     var userData = {};  
  3.     return {  
  4.         getUser: function() {  
  5.             return $http.get('server.php?Mod=communication&Func=getLoginUser').then(function(msg) {  
  6.                 userData = msg;  
  7.                 return userData;  
  8.             });  
  9.         }  
  10.     }  
  11.     //userData.getUser();  
  12.     return userData;  
  13. }])  
amit aztán a controllerben így kötöttem be:
  1. userData.getUser().then(function(data) {  
  2.         $scope.userData = userData;  
  3. });  
de ekkor egyáltalán nem frissült a többi lap. Azaz, az egyikbe írtam a másikban nem láttam. :(
Nem teljesen értem a háttér működését, de olyan mintha a jelenlegi megoldás linkelné a factory adathoz a controller adatait, az itteni megoldás meg csak "átadná", de nem köti össze.

De lehet valamit rosszul csináltam. Esetleg egy példát tudnál adni?
3

Ismét teszteltem

gtoma · 2014. Júl. 19. (Szo), 10.11
Hát a pangás miatt ismét teszteltem:
  1. mcAngular.factory('userDataFac'function($http) {  
  2.     var current = (angular.isObject($.ezstorage.get('userData')) ) ? $.ezstorage.get('userData') : {}  
  3.     var factory = {  
  4.         getData: function(postdata) {  
  5.             $http.post('server.php?Mod=communication&Func=getUser', postdata).success(  
  6.                 function(msg) {  
  7.                     if(msg == 'false') {  
  8.                         $.UIkit.notify("<i class='uk-icon-exclamation-circle'></i> Nem létező e-mail cím, jelszó páros!", {  
  9.                             status:'danger',  
  10.                             timeout : 2000,  
  11.                             pos : 'top-center'});  
  12.                     } else {  
  13.                         $('#belepes').addClass('uk-hidden');  
  14.   
  15.                         $.UIkit.notify("<i class='uk-icon-check'></i> Belépés sikerült!", {  
  16.                             status:'success',  
  17.                             timeout : 2000,  
  18.                             pos : 'top-center'});  
  19.   
  20.                         current = msg;  
  21.                         console.log(current);  
  22.                     }  
  23.                     console.log(current);  
  24.                     angular.element($('#usercontroller')).scope().addUser();  
  25.   
  26.                     return current;  
  27.                 }  
  28.             )  
  29.         },  
  30.         setData: function (data) { current = data; return current; },  
  31.         getCurrent: function() { return current; }  
  32.     }  
  33.     return factory;  
  34. })  
meghívás:
  1. $scope.LogIn = function() {  
  2.         var name = $('#belepes input[name=username]').val();  
  3.         var pass = $('#belepes input[name=pass]').val();  
  4.         if( name=='' || pass == '') {  
  5.             $.UIkit.notify("<i class='uk-icon-exclamation-circle'></i> E-mail cím, és jelszó kötelező!", {  
  6.                 status:'danger',  
  7.                 timeout : 2000,  
  8.                 pos : 'top-center'});  
  9.             return false;  
  10.         }  
  11.         var postdata = {  
  12.             uname: name,  
  13.             pass: pass  
  14.         }  
  15.         //$scope.$apply(function() {  
  16.             userDataFac.getData(postdata);  
  17.         //})  
  18.   
  19.     }  
Az adatokat lekérdezi, de nem frissíti a controller az adatokat az űrlapon. :(
Ezért raktam be a angular.element($('#usercontroller')).scope().addUser(); részt, ami után frissül.

Van esetleg ötlet, hogy lehetne rávenni a controller clonokat, hogy maguktól frissítsenek?