2016-08-22 4 views
0

Ich habe einen Login-Dienst, der mir JSON-Objekt als eine Antwort mit Benutzerdetails gibt. In dieser Antwort gibt es ein Objekt namens Berechtigungen, das mir Informationen über die CRUD-Berechtigung gibt, die dem Benutzer erlaubt ist.JSON-Daten von einem Controller an andere angularjs übergeben

Es sieht wie folgt aus:

enter image description here

Jetzt habe ich verschiedene Seiten haben, wird jede Seite mit einem Tisch. Was ich will, ist die Berechtigung des angemeldeten Benutzers zu überprüfen und dementsprechend das Element zum Erstellen/Lesen/Aktualisieren/Löschen des Datensatzes aus der Tabelle anzuzeigen/auszublenden.

Was ich momentan tue, um das Objekt auf ein Array zu speichern:

  $scope.permissionArry = []; 
      for (var i = 0; i < data.permissions.length; i++) { 
       $scope.permissionArry.push({ 
        moduleId: data.permissions[i].module_id, 
        createModule: data.permissions[i].create_module, 
        readModule: data.permissions[i].read_module, 
        updateModule: data.permissions[i].update_module, 
        deleteModule: data.permissions[i].delete_module 
       }); 
      } 

und dann auf andere Controller dieses Array übergeben wollen.

Wie wir wissen, können wir $ scope in service/factory nicht übergeben Ich weiß nicht, wie ich vorgehen soll (ich möchte $ rootScope nicht verwenden).

Antwort

1

Es ist sehr einfach Sie benötigen Service zu verwenden, um dies zu erreichen:

Beispiel kann link

MyApp.app.service("xxxSvc", function() { 

var _xxx = {}; 

return { 
    getXxx: function() { 
     return _xxx; 
    }, 
    setXxx: function (value) { 
     _xxx = value; 
    } 
}; 

}); 
finden
1

Dies ist ein Problem zu lernen, wie Daten zwischen zwei Controllern über eine Fabrik oder Service übergeben werden. Sie müssen die $ scope-Variable nicht übergeben, da Sie die Daten an ein Objekt in der Factory binden sollten.

Hier ist ein einfaches Beispiel:

-Controller 1

myApp.controller('Ctrl1', ['$scope', 'myFactory', function($scope, myFactory){ 
    myFactory.data = someFunctionThatChangesTheData(); 
}]); 

-Controller 2

myApp.controller('Ctrl2', ['$scope', 'myFactory', function($scope, myFactory){ 
    $scope.data = myFactory.data; 
}]); 

und schließlich Ihre Fabrik

myApp.factory('myFactory', function(){ 
    return { 
     data: { 
      value: 'some data' 
     } 
    } 
}); 

Sie könnten dann die Daten aus zwei Controller in einer Ansicht verwenden:

View 2 (Assigned Ctrl2)

<div> 
    <h1>View 2</h1> 
    <p>{{data.value}}</p> 
</div> 
+0

können Sie mir bitte ein Beispiel zeigen? –

+0

Beispiel mit zwei Controllern hinzugefügt. Der erste Controller ändert die Werte und der zweite Controller sieht die neuen Änderungen –

+0

Ich bin ein Neuling in AngulrJS, also Entschuldigung, wenn ich dumme Fragen stelle, aber wird dies funktionieren, wenn sowohl der Controller 1 und 2 in separaten JS sind? Was macht die Fabrik? –

0

Ich habe ein ähnliches Problem. Ich habe die Lösung verwendet, die nicht sympathisch ist, oder ich würde sagen, dass es einen besseren Ansatz geben muss, der eckigen Service oder eine Fabrik verwendet, um das zu tun (ich weiß nichts über diese).

Die Lösung, mit der ich gearbeitet habe, verwendet sessionStorage oder localStorage von HTML5. Ich weiß, es ist nicht die kantige Art, Dinge zu tun, aber es wird die Arbeit erledigen.

Kontroller 1

sessionStorage.setItem('permissions', JSON.stringify($scope.permissionArry)); 

Und das Produkt in der Steuerung 2 zu bekommen,

$scope.permissions = JSON.parse(sessionStorage.getItem('permissions')); 

Ich persönlich denke, dass es müssen bessere Lösungen als diese existieren, und Sie sollten über das Lernen Winkel Fabrik denken oder Service, um das Problem zu lösen. Aber in der Zwischenzeit können Sie diese Lösung für einen schnellen Weg verwenden

+0

Ich möchte keine Details zu den Berechtigungen in Cookies oder im Sessionspeicher speichern. –

+0

Es ist Ihre Wahl. Ich habe einen Workaround gegeben, nur um zu helfen –

+0

sessionStorage ist ein Anbieter. (Fabriken sind eine Art von Anbieter) –

Verwandte Themen