2016-06-10 5 views
1

ich eine übergeordnete Ansicht während meiner App verwendet habe:Wie weitere Einträge in der Seitenmenü von untergeordneter Ansicht setzen

$stateProvider 
    .state("app", { 
     abstract: true, 
     url: "/app", 
     templateUrl: "app/layout/menu-layout.html", 
     controller: "MenuLayoutController as vm" 
    }) 

Es enthält eine ion-nav-view für den Hauptinhalt und ein Seitenmenü:

<ion-side-menus enable-menu-with-back-views="false"> 
    <ion-side-menu-content> 
     <ion-nav-view name="maincontent"> 
     </ion-nav-view> 
    </ion-side-menu-content> 
    <ion-side-menu side="left""> 
     <ion-content> 
      <div class="list"> 
       <!-- static menu items here --> 
       <!-- and I want to add menu items here relevant 
        to the child view--> 
      </div> 
     </ion-content> 
    </ion-side-menu> 
</ion-side-menus> 

ich habe auch ein Kind Blick:

.state("app.questionnaire", { 
    url: "/questionnaire/:id", 
    views: { 
     "maincontent": { 
      templateUrl: "app/questionnaire/questionnaire.html", 
      controller: "QuestionnaireController as vm" 
     } 
    } 
}) 

ich möchte jetzt Menüpunkte in das Hauptmenü hinzufügen, wenn ich viewin bin g Die Kindansicht - aber die Elemente sind dynamisch. In meinem Fragebogen Controller habe ich diese Linie, die die Abschnitte zu holen und sie zu diesem Modell Controller hinzuzufügen:

vm.sections = $filter('orderBy')(questionnaire.Sections, 'SortOrder'); 

Und ich mag das Seitenmenü zu jedem Abschnitt Links hinzuzufügen. Gibt es einen guten Weg, das zu tun? Vielleicht mit angular-ui-router und Hinzufügen eines weiteren ion-nav-view zum Menü?

+0

Ich kam vor kurzem in diesem ziemlich viel, was Sie tun wollen, sind - https://forum.ionicframework.com/t/dynamically-change-side-menu-content/14529/6?u=michaeldoye – Und3rTow

+0

@ M.Doye das ist nützlich, aber eine zusätzliche Komplikation ist, dass meine Kind Elemente nicht statisch sind (Ich habe jetzt diese Info zu der Frage hinzugefügt). Also muss das Kind den HTML-Code in den Elternteil einfügen oder der Elternteil muss die Daten vom Kind abrufen. Ähnlich wie das Kind selbst in die 'ion-nav-Ansicht' mit dem Namen 'maincontent' injiziert wird. – Colin

+0

Haben Sie versucht, $ $ scope. $ Emit()' Ihre dynamischen Abschnitte aus der Kind-Ansicht, dann zu hören in der abstrakten Zustandskontrolle; Wenn Sie die Daten ausgeben, die zum Erstellen von Menüelementen erforderlich sind, können Sie versuchen, die Menüelemente "ng-repeat" zu verwenden. –

Antwort

0

Am Ende habe ich diese Controller in der übergeordneten tat

function MenuLayoutController() { 
    var vm = this; 

    vm.reset = function() { 
     vm.items = []; 
    }; 

    vm.showMenu = function (questionnaire){ 
     vm.items = questionnaire.menuItems; 
    } 

    vm.reset(); 
} 

Und das in meinem Kind Controller:

function QuestionnaireController($scope, /*etc*/){ 
    var vm = this; 
    vm.menuItems = //fetch menu items 

    //use scope to get a handle on the parent view model 
    var parentmodel = $scope.$parent.vm; 
    parentmodel.showMenu(vm); 

    //reset the parent view when this controller is destroyed to remove the menu 
    $scope.$on("$destroy", function() { 
     parentmodel.reset(); 
    }); 
} 
Verwandte Themen