Angular-material 如何构建控制 md-content 的 sidenav 菜单?

Angular-material how to build a sidenav menu that control a md-content?

我正在开发基于 Angularjs 和 Angular-Material 的手机,但我对如何设置菜单有点困惑。

这是我的简化情况:

在我的 body 里面有我的 md-sidenav 和一个 md-content,在我的 md-sidenav 里面有所有的 md-menu-buttons.

问题:我如何实现这些 md-menu-buttons 以便单击它们时,md-content 中显示不同的内容。

例如,当我点击时,'home' 会出现一个 div 以及所有家里的东西等等?

这是一个简单的例子 - CodePen

标记

<div ng-controller="AppCtrl" layout="column" style="height:500px;" ng-cloak="" class="sidenavdemoBasicUsage" ng-app="MyApp">
  <section layout="row" flex="">
    <md-sidenav class="md-sidenav-left" md-component-id="left" md-whiteframe="4" id="leftSideNav" md-disable-backdrop="true">
      <md-toolbar class="md-theme-indigo" layout="row">
        <h1 class="md-toolbar-tools">Sidenav Left</h1>
        <span flex></span>
        <md-button ng-click="close()">Close</md-button>
      </md-toolbar>
      <md-content layout-padding="" layout="column" layout-align="start start">
        <md-button ng-click="show('home')" class="md-primary">Show Home</md-button>
        <md-button ng-click="show('work')" class="md-primary">Show Work</md-button>
      </md-content>
    </md-sidenav>

    <md-content flex="" layout-padding="" layout="column" layout-align="top center">
      <md-button ng-click="toggleLeft()" class="md-primary">
        Toggle left
      </md-button>
      <div ng-switch="toShow">
        <div ng-switch-when="home">
          Home!
        </div>
        <div ng-switch-when="work">
          Work!
        </div>
      </div>
    </md-content>
  </section>
</div>

JS

angular
  .module('MyApp',['ngMaterial', 'ngMessages', 'material.svgAssetsCache'])
  .controller('AppCtrl', function ($scope, $mdSidenav) {
   $scope.toShow = "home"; // Default

    $scope.toggleLeft = function() {
        $mdSidenav("left")
          .toggle();
    };

    $scope.close = function () {
      $mdSidenav('left').close();
    };

    $scope.show = function (toShow) {
      $scope.toShow = toShow;
    };
});

您可能在使用 AngularJS 时考虑了 SPA( 单页应用程序 )概念,那么为什么不尝试使用 AngularJS 路由模块 - 专为此类目的而构建。

AngularJS有两个流行的路由模块,即:

为了简单起见,你可以选择第一个。

以下是设置路线以在导航到特定路线时在 ngView 指令中显示不同模板的方法:

HTML

<!-- Your md-buttons -->
<a md-button href="#dashboard">Dashboard</a>
<a md-button href="#some-other-route">Some other route</a>
<!-- ... -->
<md-content>
    <div ng-view></div> <!-- This is where your templates (and their controllers) are injected -->
</md-content>

JS

angular.module('yourApp', [
    'ngRoute', 
    // other dependencies
])

.config(function($routeProvider){
    /* 
    * set up your routes here
    */
    $routeProvider.
    when('/dashboard', {
        template: '...'  // alernatively, `templateUrl` if your partial stays somewhere else,
        controller: function (){ 
           /* custom logic for the template */ 
        }
    })
    .when('/some-other-route', {
        template: '...',
        controller: function(){ ... }
    });
})

Plunker Demo

注意: 如果在 Plunker 演示中尚未打开,请不要忘记从左上角打开侧边导航。


备注

在 HTML.

中加载 angularJS 后,不要忘记在某处加载 ngRoute 的脚本

您还可以查看 $locationProvider 服务的 html5Mode 方法,用于配置链接中路由的工作方式(例如 /dashboard 而不是 #dashboard)。