Como compartilhar dados entre controladores no AngularJS
Em minhas aulas de AngularJS, muitas vezes me perguntam: "Como faço para compartilhar dados entre os controladores no AngularJS?" Na Internet, existem muitas soluções sugeridas.
Em minhas aulas de AngularJS, muitas vezes me perguntam: "Como faço para compartilhar dados entre os controladores no AngularJS?" Na Internet, existem muitas soluções sugeridas.
No entanto, prefiro compartilhar dados usando o método Shared Data Service, e é isso que vamos explorar neste post.
Para começar, vamos supor que queremos compartilhar um objeto Product entre os controladores. Aqui, criei um serviço AngularJS chamado SharedDataService, conforme mostrado no trecho abaixo:
myApp.service('SharedDataService', function () {
var Product = {
name: '',
price: ''
};
return Product;
});
Em seguida, vamos criar dois controladores diferentes usando SharedDataService. Nos controladores, estamos usando o serviço criado na etapa anterior. Os controladores podem ser criados conforme mostrado abaixo:
var myApp = angular.module("myApp", ['CalService']);
myApp.controller("DataController1", ['$scope', 'SharedDataService',
function ($scope, SharedDataService) {
$scope.Product = SharedDataService;
}]);
myApp.controller("DataController2", ['$scope', 'SharedDataService',
function ($scope, SharedDataService) {
$scope.Product = SharedDataService;
}]);
Na visualização, podemos simplesmente usar os controladores, conforme mostrado na lista abaixo:
<div ng-controller="DataController1">
<h2>In Controller 1</h2>
<input type="text" ng-model="Product.name" /> <br/>
<input type="text" ng-model="Product.price" />
<h3>Product {{Product.name}} costs {{Product.price}} </h3>
</div>
<hr/>
<div ng-controller="DataController2">
<h2>In Controller 2</h2>
<h3>Product {{Product.name}} costs {{Product.price}} </h3>
</div>
Agora podemos compartilhar os dados entre os controladores. Como você pode ver, o nome e o preço do produto estão sendo definidos no DataController1 e estamos buscando os dados no DataController2.
Você tem alguma opção melhor que usa para compartilhar dados? Ou talvez você tenha um cenário complexo que pode não ser resolvido pela abordagem acima. Se sim, me avise! Conte-me sobre isso nos comentários abaixo.
