天天看點

Angular+Bootstrap3導航菜單

本文将介紹如何用angularjs建構一個強大的web前端系統。angularjs是由Google團隊開發的一款非常優秀web前端架構。在目前如此多的web架構下,angularjs能脫穎而出,從架構設計上就高人一等,雙向資料綁定,依賴注入,指令,MVC,模闆。Angular.js創新地把背景技術融入前端開發,掃去jQuery一度的光芒。用angularjs就像寫背景代碼,更規範,更結構化,更可控。

關于作者

  • 鄭雲飛(Tianfang), 程式員Java
  • weibo:@Tianfang
  • blog:http://zhengyunfei.iteye.com​

  • email: [email protected]

​​

Angular+Bootstrap3導航菜單

​​

前言

導航菜單是一個網站中必備的一個元件,不僅能給使用者提供友善的網站浏覽指引,還能為SEO提供良好爬取路徑。基于AngularJS+Bootstrap3的網站越來越流行,應該怎麼實作導航菜單呢?看本文的介紹。

目錄

  1. Bootstrap3中的導航菜單
  2. AngularJS中的導航菜單 – 點選事件
  3. AngularJS中的導航菜單 – 路過事件

1. Bootstrap3中的導航菜單

從​​Bootstrap3的文檔​​中我們可以看到,預設提供的導航菜單支援下拉功能,單擊觸發,支援2級菜單,如下圖所示。

​​

Angular+Bootstrap3導航菜單

​​

實作文檔中的效果,我們可以快速建立一個靜态的HTML的項目,建立細節不多解釋,參考文章: 快速搭建Web環境 Angularjs + Express3 + Bootstrap3,bower解決js的依賴管理

建立項目目錄

~ mkdir D:\workspace\javascript\angular-navbar\
~ cd D:\workspace\javascript\angular-navbar\      

建立依賴配置檔案bower.json

~ vi D:\workspace\javascript\angular-navbar\bower.json

{
    "name": "angular-navbar",
    "version": "0.0.1",
    "author": "Conan Zhang<[email protected] style="margin: 0pt; padding: 0pt;">",
    "dependencies": {
    }
}      

下載下傳依賴包

~ D:\workspace\javascript\angular-navbar>bower install bootstrap --save
bower bootstrap#*               cached git://github.com/twbs/bootstrap.git#3.1.1
bower bootstrap#*             validate 3.1.1 against git://github.com/twbs/bootstrap.git#*
bower jquery#>= 1.9.0           cached git://github.com/jquery/jquery.git#2.1.1
bower jquery#>= 1.9.0         validate 2.1.1 against git://github.com/jquery/jquery.git#>= 1.9.0
bower bootstrap#~3.1.1         install bootstrap#3.1.1
bower jquery#>= 1.9.0          install jquery#2.1.1
bower                          no-json No bower.json file to save to, use bower init to create one
bootstrap#3.1.1 bower_components\bootstrap
└── jquery#2.1.1      

建立HTML檔案:page1.html

~ vi D:\workspace\javascript\angular-navbar\page1.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <title>Bootstrap導航菜單</title>
    <link rel="stylesheet" href="/bower_components/bootstrap/dist/css/bootstrap.min.css">
</head>
<body>

<div class="container">
    <div class="row">
        <nav class="navbar navbar-default" role="navigation">
            <div class="navbar-header">
                <a class="navbar-brand" href="#">Brand</a>
            </div>

            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav">
                    <li class="active"><a href="#">Link</a></li>
                    <li><a href="#">Link</a></li>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            <li><a href="#">Action</a></li>
                            <li><a href="#">Another action</a></li>
                            <li><a href="#">Something else here</a></li>
                            <li class="divider"></li>
                            <li><a href="#">Separated link</a></li>
                            <li class="divider"></li>
                            <li><a href="#">One more separated link</a></li>
                        </ul>
                    </li>
                </ul>
            </div>
        </nav>
    </div>
</div>

<script src="/bower_components/jquery/dist/jquery.min.js"></script>
<script src="/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>

</body>
</html>      

項目目錄結構:

​​​

Angular+Bootstrap3導航菜單

​​

啟動靜态伺服器,并檢視page1.html的預覽效果。

~ D:\workspace\javascript\angular-navbar>anywhere
Running at http://192.168.1.12:8000      

​​

Angular+Bootstrap3導航菜單

​​

第一步我們就現實了Bootstrap3的導航菜單。

2. AngularJS中的導航菜單 – 點選事件

接下來,我們把項目改造成AngularJS的項目,并讓Bootstrap配合Angularjs一起使用,實作導航菜單的效果,并對菜單點選事件進行處理,通過切換選中菜單樣式。

增加Angularjs的依賴包

~ D:\workspace\javascript\angular-navbar>bower install angular --save
~ D:\workspace\javascript\angular-navbar>bower install angular-route --save
~ D:\workspace\javascript\angular-navbar>bower install angular-bootstrap --save      

建立HTML檔案Page2.html,通過ng-class,來設定導航菜單的選中樣式。

~ vi D:\workspace\javascript\angular-navbar\page2.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="utf-8">
    <title>Bootstrap導航菜單</title>
    <meta name="description" content="Bootstrap導航菜單">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="fragment" content="!" />

    <link rel="stylesheet" href="/bower_components/bootstrap/dist/css/bootstrap.min.css">
</head>
<body ng-app="page2">

<div class="container">
    <div class="row" ng-controller="NavbarCtrl">
        <nav class="navbar navbar-default" role="navigation">
            <div class="navbar-header">
                <a class="navbar-brand" href="/">Brand</a>
            </div>

            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav">
                    <li ng-class="{active:isActive('/abc')}"><a href="/abc">ABC</a></li>
                    <li ng-class="{active:isActive('/123')}"><a href="/123">123</a></li>
                    <li ng-class="{active:isActive('/dropdown')}" class="dropdown">
                        <a href="/dropdown" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
                        <ul class="dropdown-menu">
                            <li><a href="/dropdown/label1">label1</a></li>
                            <li><a href="/dropdown/label2">label2</a></li>
                            <li><a href="/dropdown/label3">label3</a></li>
                            <li class="divider"></li>
                            <li><a href="/dropdown/label4">label4</a></li>
                            <li class="divider"></li>
                            <li><a href="/dropdown/label5">label5</a></li>
                        </ul>
                    </li>
                </ul>
            </div>
        </nav>
    </div>
</div>

<script src="/bower_components/jquery/dist/jquery.min.js"></script>
<script src="/bower_components/angular/angular.min.js"></script>
<script src="/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
<script src="/bower_components/angular-route/angular-route.min.js"></script>
<script src="/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js"></script>

<script src="/js/app.js"></script>

</body>
</html>      

建立Angularjs檔案控制app.js

~ vi D:\workspace\javascript\angular-navbar\js\page2.html

'use strict';

var page2 = angular.module('page2', ['ui.bootstrap', 'ngRoute']);

page2.config(['$routeProvider', '$locationProvider', '$sceProvider', function ($routeProvider, $locationProvider, $sceProvider) {
    $routeProvider
        .when('/', {controller: 'DemoCtrl'})
        .when('/abc', {controller: 'DemoCtrl'})
        .when('/123', {controller: 'DemoCtrl'})
        .otherwise({redirectTo: '/'});
    $locationProvider.html5Mode(true);
}]);

page2.controller('NavbarCtrl', function ($scope, $location) {
    $scope.isActive = function (route) {
        if ($location.path().indexOf('/dropdown') == 0) {
            return  route === '/dropdown';
        }
        return route === $location.path();
    }
});

page2.controller('DemoCtrl', function () {
    // nothing
});      

檢視運作效果,這樣就可以實作菜單選中的效果了!

​​​

Angular+Bootstrap3導航菜單

​​

3. 導航菜單的滑鼠路過事件

使用AngularJS架構後,導航菜單就實作了動态的特性,通過點選實作樣式的切換。Dropdown的控件需要滑鼠點選,才會下拉出二級菜單,如果用滑鼠路過事件就觸發可能會更友善,那麼下面繼續對下拉清單控件改造。

實作方式有好幾種,比如通過jQuery增加對滑鼠路過事件的監聽,或者開發一個AngularJS的插件。不過,還有一種更簡單的實作方式,就是通過css來控制。

我們增加一段css代碼。

.dropdown:hover .dropdown-menu {
    display: block;
}      

簡簡單單一行定義就完成了,再看看效果。當滑鼠路過Dropdown時,下拉菜單就自動彈出了。

​​

Angular+Bootstrap3導航菜單

​​

git clone https://github.com/bsspirit/angular-navbar.git
cd angular-navbar
bower install
anywhere      

繼續閱讀