简体   繁体   中英

Angular Material $mdSidenav error

I am just starting on angular material, so I built a skeleton page with a toolbar, sidenav, and content.

Yet, when I try to toggle the sidenav with $mdSidenav's toggle(), it gives me the following error:

TypeError: $mdSidenav is not a function

Here's the HTML:

<!DOCTYPE html>
<!--[if lt IE 7]>
<html lang="en" ng-app="myApp" class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>
<html lang="en" ng-app="myApp" class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>
<html lang="en" ng-app="myApp" class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!-->
<html lang="en" ng-app="myApp" class="no-js"> <!--<![endif]-->
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>My AngularJS Sandbox</title>
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <link rel="stylesheet" href="bower_components/angular-material/angular-material.min.css">
    <link rel="stylesheet" href="style.css">
</head>
<body ng-controller="mainCtrl" layout="row" layout-fill ng-cloak>


<!--[if lt IE 7]>
<p class="browsehappy">You are using an <strong>outdated</strong> browser. Please <a href="http://browsehappy.com/">upgrade
    your browser</a> to improve your experience.</p>
<![endif]-->
<md-sidenav id="sideNav" md-component-id="left" class="md-sidenav-left md-whiteframe-z2">
    <md-toolbar id="sideNav-bar" layout="row"></md-toolbar>
    <md-divider></md-divider>
</md-sidenav>

<div layout="column" flex layout-fill>
    <md-toolbar layout="row" id="topBar" layout-align="left center" layout-padding>
        <a class="fa-holders" ng-click="openSideNav('left')"><i class="fa fa-bars"></i></a>
        <span layout="column" ng-bind="currentTitle"></span>
    </md-toolbar>
    <md-content id="content_wrapper" flex layout="row"></md-content>
</div>


<script src="bower_components/angular/angular.min.js"></script>
<script src="bower_components/angular-ui-router/release/angular-ui-router.min.js"></script>
<script src="bower_components/angular-animate/angular-animate.min.js"></script>
<script src="bower_components/angular-aria/angular-aria.min.js"></script>
<script src="bower_components/angular-messages/angular-messages.min.js"></script>
<script src="bower_components/angular-material/angular-material.min.js"></script>
<script src="app.js"></script>
</body>
</html>

and the JS:

'use strict';

angular.module('myApp', [
        'ngMaterial'
    ])
    .config([function () {
    }])

    .controller('mainCtrl', ['$scope', function ($scope, $mdSidenav) {
        $scope.soKai = 'soKai';
        $scope.currentTitle = 'Maths';
        $scope.appName = 'KaiAcademics';
        $scope.openSideNav = function(componentId) {
            $mdSidenav(componentId).toggle();
        }
    }])
;

Here's angular material's documentation . Am I missing anything?

You forgot to inject $mdSidenav .

.controller('mainCtrl', ['$scope', '$mdSidenav', function ($scope, $mdSidenav) {
    ...
}])

https://docs.angularjs.org/guide/di

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM