Szukaj…


Uwagi

Bardzo częstym pytaniem podczas pracy z Angularem jest sposób udostępniania danych między kontrolerami. Korzystanie z usługi jest najczęstszą odpowiedzią i jest to prosty przykład demonstrujący fabryczny wzorzec udostępniania dowolnego typu obiektu danych między co najmniej dwoma sterownikami. Ponieważ jest to odwołanie do obiektu współdzielonego, aktualizacja na jednym kontrolerze będzie natychmiast dostępna na wszystkich innych kontrolerach korzystających z usługi. Pamiętaj, że zarówno usługodawcy, jak i fabryki oraz obaj dostawcy .

Używanie ngStorage do udostępniania danych

Po pierwsze, umieść źródło ngStorage w pliku index.html.

Przykładem wstrzykiwania ngStorage src byłoby:

<head>
    <title>Angular JS ngStorage</title>
    <script src = "//ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
    <script src="https://rawgithub.com/gsklee/ngStorage/master/ngStorage.js"></script>
</head>

ngStorage daje 2 miejsca do przechowywania, a mianowicie: $localStorage i $sessionStorage . Musisz wymagać ngStorage i wstrzyknąć usługi.

Załóżmy, że jeśli ng-app="myApp" , to wstrzykujesz ngStorage w następujący sposób:

var app = angular.module('myApp', ['ngStorage']);
        app.controller('controllerOne', function($localStorage,$sessionStorage) {
        // an object to share
        var sampleObject = {
            name: 'angularjs',
            value: 1
        };
       $localStorage.valueToShare = sampleObject;
       $sessionStorage.valueToShare = sampleObject;
    })  
.controller('controllerTwo', function($localStorage,$sessionStorage) {
    console.log('localStorage: '+ $localStorage +'sessionStorage: '+$sessionStorage);
})

$localStorage i $sessionStorage są globalnie dostępne za pośrednictwem dowolnych kontrolerów, o ile wstrzykujesz te usługi do kontrolerów.

Możesz także użyć localStorage i sessionStorage HTML5 . Jednak użycie HTML5 localStorage wymagałoby szeregowania i deserializacji obiektów przed ich użyciem lub zapisaniem.

Na przykład:

var myObj = {
    firstname: "Nic",
    lastname: "Raboy",
    website: "https://www.google.com"
} 
//if you wanted to save into localStorage, serialize it  
window.localStorage.set("saved", JSON.stringify(myObj));  

//unserialize to get object  
var myObj = JSON.parse(window.localStorage.get("saved"));

Udostępnianie danych między kontrolerami za pomocą usługi

Możemy stworzyć service do set i get danych między controllers a następnie wstawić tę usługę do funkcji kontrolera tam, gdzie chcemy jej użyć.

Usługa :

app.service('setGetData', function() {
  var data = '';
    getData: function() { return data; },
    setData: function(requestData) { data = requestData; }
});

Kontrolery:

app.controller('myCtrl1', ['setGetData',function(setGetData) {

  // To set the data from the one controller
  var data = 'Hello World !!';  
  setGetData.setData(data);

}]);

app.controller('myCtrl2', ['setGetData',function(setGetData) {

  // To get the data from the another controller  
  var res = setGetData.getData();
  console.log(res); // Hello World !!

}]);

Tutaj widzimy, że myCtrl1 służy do setting danych, a myCtrl2 służy do getting danych. Możemy więc udostępniać dane z jednego kontrolera drugiemu kontrolerowi w ten sposób.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow