Ein Ansatz ...
Sie einen monolithischen Controller verwenden:
<div data-ng-controller="mainCTRL">
<div data-ng-controller="productCTRL">
<span ng-model="basket | count"></span>
....Some HTML Code......
</div>
<div data-ng-controller="AuthController">
....Some HTML Code...
</div>
<div data-ng-controller="productCTRL">
<ul ng-repeat="product in products">
<li>{{product.title}}</li>
</ul>
</div>
</div>
Dann, wenn Sie den $http
Anruf in mainCTRL
statt productCTRL
machen, wird es nur einmal ausgeführt wenn die Ansicht gerendert wird. Sie könnten dann auf die Daten zugreifen, die in mainCTRL
von productCTRL
über Gültigkeitsbereichvererbung gehalten werden.
Ein anderer Ansatz ...
Sie könnten den $http
Aufruf zu einem Winkel Service oder Fabrik bewegen. Da es sich um Singletons handelt, wird immer nur eine Instanz existieren und das bedeutet, dass nur ein Aufruf erfolgt, wenn die App zum ersten Mal geladen wird. Sie würden dann die zurückgegebenen Daten lokal im Service speichern und öffentlich verfügbar machen.
Hier ist eine einfache Implementierung als Fabrik:
appController("productCTRL", function(productService){
$scope.products = productService.products;
});
Der Controller wird nach wie vor:
app.factory("productService", function($http){
var products = [];
$http.get("api/products/get-products").then(function(response){
products = response.data;
});
return {
products: products
}
});
Wenn Sie die Fabrik in Ihre productCTRL
injizieren es einen direkten Zugang zum products
Daten haben instanziiert zweimal, aber es wird nur die Variable $scope.products
neu zuweisen. Am wichtigsten ist, dass es keinen redundanten Aufruf über HTTP an Ihre API mehr durchführt.
Sie Frage ist nicht klar, rufen Sie Controller-Funktion auf ein Ereignis? – ManishSingh
ich machte das klarer – cyberina
Es ist immer noch nicht klar, was Sie fragen. – quirimmo