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:
<li ng-controller="valami más">...</li>
<li ng-controller="user">
     <button ng-click="adatlekeres()">Adatok</button>
     adat csoport 1
</li>
<li ng-controller="user">adat csoport 2</li>
<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:

mcAngular.factory('userData', ['$http', '$rootScope', function($http, $rootScope) {
    var userData = {};
    return {
        getUser: function() {
            return $http.get('server.php?Mod=communication&Func=getLoginUser').then(function(msg) {
                userData = msg;
                return userData;
            });
        }
    }
    //userData.getUser();
    return userData;
}])
amit aztán a controllerben így kötöttem be:
userData.getUser().then(function(data) {
        $scope.userData = userData;
});
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:
mcAngular.factory('userDataFac', function($http) {
    var current = (angular.isObject($.ezstorage.get('userData')) ) ? $.ezstorage.get('userData') : {}
    var factory = {
        getData: function(postdata) {
            $http.post('server.php?Mod=communication&Func=getUser', postdata).success(
                function(msg) {
                    if(msg == 'false') {
                        $.UIkit.notify("<i class='uk-icon-exclamation-circle'></i> Nem létező e-mail cím, jelszó páros!", {
                            status:'danger',
                            timeout : 2000,
                            pos : 'top-center'});
                    } else {
                        $('#belepes').addClass('uk-hidden');

                        $.UIkit.notify("<i class='uk-icon-check'></i> Belépés sikerült!", {
                            status:'success',
                            timeout : 2000,
                            pos : 'top-center'});

                        current = msg;
                        console.log(current);
                    }
                    console.log(current);
                    angular.element($('#usercontroller')).scope().addUser();

                    return current;
                }
            )
        },
        setData: function (data) { current = data; return current; },
        getCurrent: function() { return current; }
    }
    return factory;
})
meghívás:
$scope.LogIn = function() {
        var name = $('#belepes input[name=username]').val();
        var pass = $('#belepes input[name=pass]').val();
        if( name=='' || pass == '') {
            $.UIkit.notify("<i class='uk-icon-exclamation-circle'></i> E-mail cím, és jelszó kötelező!", {
                status:'danger',
                timeout : 2000,
                pos : 'top-center'});
            return false;
        }
        var postdata = {
            uname: name,
            pass: pass
        }
        //$scope.$apply(function() {
            userDataFac.getData(postdata);
        //})

    }
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?