2017-01-19 10 views
0

Ich habe zwei Controller headerController, aboutController.Übergeben Sie einen Wert an einen anderen Controller, der zuerst

headerController -> Um die Navigation und Umleitung

aboutController halten -> funktioniert, wenn über-uns Seite geladen wird.

Mein Problem ist ich muss den headerController Variablenwert aktualisieren, wenn aboutController geladen wird. Wenn bei uns die Seite geladen wird, sollte die Navigation über-uns aktiv sein, ähnlich wie bei allen Seiten.

Dies ist mein Code:

app.service('shareService', function() { 
    var data; 
    return { 
     getProperty: function() { 
      return data; 
     }, 
     setProperty: function (value) { 
      data = value; 
     } 
    }; 
}); 
app.controller('headerController', function ($scope, shareService) { 
    $scope.navigation = [ 
     {url: '#!/home', name: 'Home'}, 
     {url: '#!/about-us', name: 'About Us'}, 
     {url: '#!/services', name: 'Services'} 
    ]; 
    var data = shareService.getProperty(); 
    console.log(data); 
    $scope.selectedIndex = 0; 
    $scope.itemClicked = function ($index) { 
     console.log($index); 
     $scope.selectedIndex = $index; 
    }; 
}); 
app.controller('aboutController', function ($scope, shareService) { 
    console.log('test'); 
    $scope.selectedIndex = 1; 
    shareService.setProperty({navigation: $scope.selectedIndex}); 
}); 

header.html:

<header ng-controller="headerController"> 
    <div class="header"> 
     <div class="first-half col-md-6"> 
      <div class="row"> 
       <div class="logo"> 
        <a href="#!/home"><img src="assets/img/logo.png" alt=""/></a> 
       </div> 
      </div> 
     </div> 
     <div class="second-half col-md-6"> 
      <div class="row"> 
       <div class="social-share"> 
        <ul id="social-share-header"> 
         <li><i class="fa fa-facebook" aria-hidden="true"></i></li> 
         <li><i class="fa fa-twitter" aria-hidden="true"></i></li> 
         <li><i class="fa fa-google-plus" aria-hidden="true"></i></li> 
        </ul> 
       </div> 
      </div> 
     </div> 
     <nav> 
      <ul ng-repeat="nav in navigation"> 
       <li class="main-nav" ng-class="{ 'active': $index == selectedIndex }" 
      ng-click="itemClicked($index)"> 
        <a href="{{nav.url}}">{{nav.name}}</a> 
       </li> 
      </ul> 
     </nav> 
    </div> 
</header> 

index.html Dies ist, wie meine Vorlage funktioniert.

<body ng-app="myApp"> 
     <section class="first-section"> 
      <div ng-include="'views/header.html'"></div> 
     </section> 
     <section class="second-section"> 
      <div ng-view></div> 
     </section> 
     <section class="last-section"> 
      <div ng-include="'views/footer.html'"></div> 
     </section> 
    </body> 

Update 1: Index.html-Datei hinzugefügt.

Update 2: Problem Erklärung: Wenn ich direkt auf die Über uns Seite gelaufen bin, dann ist immer noch die Home Navigation aktiv. Aber es sollte über uns sein

+0

Sie können eine Variable in einem Service, der von 'AboutController' aktualisiert werden und von' HeaderController' – Weedoze

+0

Ich kann immer noch nicht sehen, was das Problem ist. Ich nehme an, Header-Controller existiert für den Header, der eine separate Vorlage ist, die die ganze Zeit im DOM enthalten ist. Wenn der Benutzer also aus der Kopfzeile auf ein Navigationselement klickt, wird itemClicked ausgelöst. Dasselbe passiert auch, wenn der Controller manipuliert wird, der Header-Controller ist immer noch da. Können Sie bitte das Problem angeben? – Korte

+0

Bitte überprüfen Sie meine Updates – Jagadeesh

Antwort

0

Was Sie suchen, ist Ereignis-basierte Kommunikation zwischen Ihren Controllern. Dies kann leicht unter Verwendung von. $ rootScope. $ on, $ rootScope. $ emit und $ rootScope. $ broadcast. Da alle drei in dieser Antwort erklärt werden, ist es zu viel. Bitte gehen Sie durch diese article

Verwandte Themen