2016-04-27 5 views
0

Ich habe mich gefragt, wie man die Daten ändert, aber den gleichen Controller in meiner eckigen App behalten. Grundsätzlich werde ich eine Liste von Aktivitäten (Restaurants, Parks usw.) haben, wenn ich auf eine dieser Aktivitäten klicke. In der Ansicht wird das gesamte Restaurant angezeigt, und dasselbe gilt für die Parks. Ich weiß, wie man das macht, aber ich müsste ein park_ctrl und ein restaurant_ctrl erstellen, und da die Daten genau so formatiert werden. Ich wollte nur wissen, ob ich nur einen Controller verwenden kann und nur die Daten ändern, die er erhält, wenn ich auf diese Schaltflächen klicke.Umschalten der Daten mit dem gleichen Controller AngularJS

Ich hoffe meine Frage ergibt Sinn.

+0

Ja, Sie können. Versuchen Sie es einfach und kommen Sie hierher zurück, wenn Sie ein konkretes Problem haben. –

Antwort

0

Logik um Abrufen von Daten in der Verantwortung der Dienste sein sollen, so dass ich glaube, dass Sie nur einen anderen Dienst in den verschiedenen Fällen nennen würden, aus dem gleichen Controller

0

Ich denke, es ist nicht wirklich ein gute Idee, aber Meinung basierend.

Sie eine Funktion machen:

function($scope){ 

    $scope.changePage = function (type) { 
    if(type==="park"){ 
     $scope.parks = asynLoadFunctionToGetParks(); 
    }else{ 
     if(type === "restaurants"){ 
     /* same as below */ 
     } 
    } 
    }; 

} 

Und die Art Ihrer Ansicht nach Wechsel mit:

<button ng-click="changePage('parks')">Parks</button> 
<button ng-click="changePage('restaurants')">Restaurants</button> 

<div ng-if="type==='park'"> 
    {{parks}} 
</div> 


<div ng-if="type==='restaurants'"> 
    {{restaurants}} 
</div> 
0

denke ich, das Problem hier ist, dass die meisten der Winkel Beispiele verfügbar sind von der " Hallo Welt "Vielfalt und so zeigen sie Daten direkt vom Controller abrufen. Das Problem ist, dass AngularJS out of the box nicht wirklich eine Business-Logik-Schicht selbst hat, und ich denke, dass die meisten Leute, die eine solche Schicht hinzugefügt haben, zu beschäftigt sind, um Beispiele aufzustellen.

Die Art, wie ich dies tun würde, ist ein "Master" -Service, der alle verschiedenen Datentypen entweder im Run-Block oder langsam, wenn der Benutzer die App navigiert, je nach Ihren Bedürfnissen erhalten kann. Dann würde ich im Falle einer Direktive einen Verweis auf die zutreffende Untersammlung in der Routenauflösung (resolve property) oder den isolierenden Bereich angeben.

Alternativ kann der Controller nach den Daten fragen, indem er masterService.getCollection($scope.collectionName) oder etwas ähnliches anruft, aber wenn Sie das tun, stoßen Sie auf das Problem, dass masterService die bestimmte Sammlung noch nicht haben kann, und dann müssen Sie Ihren Controller überfluten mit all dem Versprechen, die Dinge zu lösen, als ob es die Verantwortung eines Controllers wäre, damit umzugehen.

Sie könnten dies vermeiden, indem Sie in der Ansicht an masterService.collections[$scope.collectionName] binden, wodurch der Controller nur die Auflistung der $ scope- oder controllerAs-Variable freigibt und der masterService immer noch dafür verantwortlich ist, die Daten abzurufen und verfügbar zu machen.

0

Ja, Sie können. Verwenden Sie einfach einen anderen Dienst und eine gemeinsame Variable im Bereich.

if (something) { 
    $scope.data = restaurantsService.get(); 
} else { 
    $scope.data = parksService.get(); 
} 
Verwandte Themen