2017-10-30 1 views
0

Rahmen:ng-beinhaltet eine Ansicht mit einer Steuerung und mit einer Variablen aus einem anderen Controller

I einen Winkel app

I eine Tabelle der Regionen haben. Und es zeigt Namen und Beschreibungen.

, was ich will:

ich einen kleinen Blick auf Geographie Details angezeigt werden soll, wenn der Benutzer auf einer bestimmten Geographie in der Tabelle klickt. Diese Ansicht enthält viele weitere Informationen. Es wird von einem anderen Controller als der Tabelle gesteuert.

main.html: hier

<div ng-if="displaySingle" ng-controller="GeographyController"> 
    <div ng-include="'html/geography-detail.html'" ng-controller="GeographyDetailController"></div> 
</div> 


<tr ng-repeat="geography in geographies" ng-controller="GeographyController"> 
    <td ng-click="displaySingleFunction(geography.id)">{{geography.name}}</td> 
    <td>{{geography.description}}</td> 
</tr> 

Das Problem ist, dass, wenn der Benutzer auf einer bestimmten Zeile klickt, ich brauche die ID aus der dieser Reihe zum GeographyDetailController passieren. Aber der Controller für diese Zeile befindet sich im GeographyController.

Frage:

Wie kann ich diese Codezeile:

<div ng-include="'html/geography-detail.html'" ng-controller="GeographyDetailController"></div> 

eine einzige ID an den GeographyDetailController passieren?

was ich habe:

eine bestimmte Zeile Klicken auf meine Detailansicht erscheinen und verschwinden lassen, es kann einfach nicht diese Ansicht und seine Controller senden die ID, dass ich es brauchen.

UPDATE 1

Dies funktioniert, wenn ich einen Link zu der Seite folgen will, aber ich nicht, will ich in eine größere Ansicht, diese Ansicht schließen.

ui-sref="geographyDetail({uuid:geography.uuid})" 

Antwort

1

Von dass ich sehe, GeographyDetailController ist ein Kind Controller von GeographyController. Dann gibt es mehrere Möglichkeiten, den Parameter zu übergeben.

  1. Sie können das Ereignis $ scope oder $ rootScope verwenden. Das heißt, wenn Benutzer klicken Sie auf die Zeile, Sie Ereignis ($scope.$emit oder $rootScope.$emit) von GeographyController, übergeben Sie Ihre ID und rufen $scope.$on oder $rootScope.$on in GeographyDetailController bekommen die ID emittieren.

  2. Oder Sie können wie folgt tun: wenn Benutzer klicken Sie auf die Zeile, Sie ein neues Feld in der $ Rahmen hinzufügen ($scope.myParam = id) innerhalb des GeographyController und es so erhalten in der GeographyDetailController ($scope.$parent.myParam).

Persönlich rate ich Ihnen, die zweite Methode zu verwenden.

Verwandte Themen