2013-07-28 21 views

Odpowiedz

10

Istnieje kilka problemów z was kodu. Proszę porównać moją poprawkę z twoją wersją. (Plnkr)

  1. Powinieneś użyć config(), aby zarejestrować reguły routingu.
  2. Trzeba umieścić ng-view w stronę html i upewnij się, że jest w środku zakresu NavCtrl
  3. nazwę kontrolera w zasadach routingu powinny być ciągiem. Tęskniłeś za cytatami.
  4. Należy użyć ng-click, aby uruchomić, aby załadować stronę zamiast href. Pamiętaj, że routing jest w zasięgu Angularjs, a nie w html.
+1

+1 za wnikliwe "Należy pamiętać, że routing jest w zasięgu Angularjs, a nie w html". –

+0

Czy istnieje jeden sposób? Jak mogę to zrobić za pomocą $ routeProvider? – oshliaer

6

ja bezwzględnie zalecamy aby przełączyć się z czystego bootstrap do angularjs kompatybilny startowej.

na przykład - http://mgcrea.github.io/angular-strap/#/navbar

+2

Uzgodnione długotrwałe działanie wygląda świetnie. Wciąż uczę się kanciasty, więc robię coś na własną rękę, więc rozumiem, że ramy są dla mnie ważne. – lostintranslation

+0

W takim przypadku nie używaj programu ładującego. Bootstrap i Angular nie zawsze będą ładnie grały, jeśli użyjesz wersji standardowej, a większość rzeczy, które może zrobić bootstrap, można już zrobić w Angular. Nie znaczy to, że nigdy nie należy używać Bootrapa z Angularem, ale jeśli chcesz się nauczyć, powinieneś nauczyć się robić rzeczy w Angular, zanim przedstawisz Bootstrapa. –

+0

Dobra uwaga. Natknąłem się na to, szukając własnego rozwiązania, ale chciałem użyć [angular-ui-router] (https://github.com/angular-ui/ui-router). FWIW, stworzyłem podstawową dyrektywę, która używa kątowego-ui-routera i niewiele więcej, aby dać ci kontrolę nad twoim paskiem startowym bootstrap: [cr-bootstrap-navbar] (https://github.com/coderigo/cr-bootstrap-navbar) – coderigo

1

wiem, że post jest nieco stary, ale może może pomóc komuś innemu navbar menu

Jest navbar z kilkoma rozwijanego menu realizowanego w angularjs, Boostrap CSS i kątowy-ui. Menu rozwijane jest tworzone przez wywołanie rekurencyjne w dyrektywie niestandardowej.

index.html:

<body> 
    <h1>Hello Navbar</h1> 
    <div ng-app="my-app"> 
    <div ng-controller="treeController"> 
     <nav class="navbar navbar-default" role="navigation"> 
     <div class="navbar-header"> 
      <a class="navbar-brand" href="#"> 
      <span>Brand</span> 
      </a> 
     </div> 
     <ul class="nav navbar-nav"> 
      <li class="dropdown" dropdown on-toggle="toggled(open)"> 
      <a href="#" class="dropdown-toggle" dropdown-toggle role="button"> 
       Dropdown 
       <span class='caret'></span> 
      </a> 
      <tree tree='tree'></tree> 
      </li> 
      <li class="dropdown" dropdown on-toggle="toggled(open)"> 
      <a href="#" class="dropdown-toggle" dropdown-toggle role="button"> 
       Just a clone 
       <span class='caret'></span> 
      </a> 
      <tree tree='tree'></tree> 
      </li> 
     </ul> 
     </nav> 
    </div> 
    </div> 
</body> 

The script.js:

var app = angular.module('my-app', ['ui.bootstrap']); 

app.controller('treeController', function($scope) { 
    $scope.callMe = function() { 
    alert("test"); 
    }; 

    $scope.tree = [{ 
    name: "Bob", 
    link: "#", 
    subtree: [{ 
     name: "Ann", 
     link: "#" 
    }] 
    }, { 
    name: "Jon", 
    link: "#", 
    subtree: [{ 
     name: "Mary", 
     link: "#" 
    }] 
    }, { 
    name: "divider", 
    link: "#" 
    }, { 
    name: "Another person", 
    link: "#" 
    }, { 
    name: "divider", 
    link: "#" 
    },{ 
    name: "Again another person", 
    link: "#" 
    }]; 

}); 

app.directive('tree', function() { 
    return { 
    restrict: "E", 
    replace: true, 
    scope: { 
     tree: '=' 
    }, 
    templateUrl: 'template-ul.html' 
    }; 
}); 

app.directive('leaf', function($compile) { 
    return { 
    restrict: "E", 
    replace: true, 
    scope: { 
     leaf: "=" 
    }, 
    templateUrl: 'template-li.html', 
    link: function(scope, element, attrs) { 
     if (angular.isArray(scope.leaf.subtree)) { 
     element.append("<tree tree='leaf.subtree'></tree>"); 
     element.addClass('dropdown-submenu'); 
     $compile(element.contents())(scope); 
     } else { 
     element.bind('click', function() { 
      alert("You have clicked on " + scope.leaf.name); 
     }); 

     } 
    } 
    }; 
}); 

i wreszcie dwa szablony:

<ul class='dropdown-menu'> 
    <leaf ng-repeat='leaf in tree' leaf='leaf'></leaf> 
</ul> 

<li ng-class="{divider: leaf.name == 'divider'}"> 
    <a ng-if="leaf.name != 'divider'">{{leaf.name}}</a> 
</li> 

Mam nadzieję, że to pomaga.

Powiązane problemy