2017-02-04 10 views
14

Próbuję uruchomić menu projektowania Angular Material Design, ale wydaje mi się, że nie można użyć mdMenu $, które ma być wstrzyknięte przez ng-click.

Moje HTML markup:

<div layout="column" layout-fill ng-controller="AuthControl"> 
    <md-toolbar ng-controller="navigationControl"> 
     <div ng-controller="menu as ctrl"> 
      <md-menu> 
      <md-button class="md-icon-button" ng-click="ctrl.open($mdMenu, $event)"> 
       <md-icon>menu</md-icon> 
      </md-button> 
      <md-menu-content width="4"> 
       <md-menu-item> 
        <md-button> 
         <md-icon>account_circle</md-icon> 
        </md-button> 
       </md-menu-item> 
      </md-menu-content> 
     </md-menu> 
     </div> 
    </md-toolbar> 
</div> 

kątowej Kontroler:

controllers.controller('menu', function menuControl($mdDialog) { 
    var originatorEv; 

    this.open = function($mdMenu, ev) { 
    originatorEv = ev; 
    $mdMenu.open(ev); 
    }; 
}); 

contoller zostaje wstrzyknięty prawidłowo, ale gdy uruchamiam otrzymuję błąd

TypeError: Cannot read property 'open' of undefined 

Czy ktoś wie jak to naprawić? Dzięki

Odpowiedz

28

Zamiast mdMenu, przechodzą mdOpenMenu

<md-button aria-label="menu" class="md-fab md-mini md-primary" ng-click="ctrl.openMenu($mdOpenMenu, $event)"> 

Kontroler:

this.openMenu = function($mdOpenMenu, ev)  { 
     originatorEv = ev; 
     $mdOpenMenu(ev); 
    }; 

DEMO

+7

Pracował jak urok thx. Czy wiesz, dlaczego to zadziałało, a przykład podany w dokumentacji nie działa? Jak to jest, że $ mdMenu nie jest zdefiniowane? – Jason

+0

Założę się, że został zmieniony, a wersja demo nadal używa starszej wersji materiału kątowego. – user3413723

1

"$ mdOpenMenu" has been replaced przez "$ mdMenu.open" i jest teraz przestarzałe. Użyj najnowszej wersji materiału kątowego i będzie działać dobrze.

enter image description here