搭建帶路由的AngularJs框架


一、AngularJs框架簡介:

  AngularJs是一種能夠輕松實現一個應用開發的JS框架,其較為突出的特點是:模塊化、數據的雙向綁定和依賴注入等等。

    模塊化:AngularJs中存在模塊的概念,即每個模塊必須由一個控制器來控制,控制器在應用中具有唯一一個名稱;

    雙向綁定:將控制器中賦值給變量的數據通過一個通道($scope)實現視圖(view)和控制器(controller)之間的連接,視圖在修改數據時會立刻更新$scope,同樣的$scope發生改變時也會立刻重新渲染視圖;

    依賴注入:類似於C語言中文件外的函數在本文件中使用前,必須先聲明一樣,每一個控制器中所要用到的服務(可以理解為函數)都要在開頭作為參數聲明;

二、路由

  $route服務是AngularJs中的一個服務,作用是聲明容器和其對應的控制器的對應關系,由於容器的存在,配合路由,使得應用實際上變成一個單頁面應用程序,在一個HTML頁面中聲明所有控制器,並為程序設置一個個容器,不同的容器調用不同的控制器實現不同功能,切換容器達到切換功能的效果,頁面上顯示為頁面的切換。

三、框架的搭建

  首先,在一個HTML文件中聲明你的應用:

<html ng-app="myApp">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>My AngularJS App</title>
  <meta name="description" content="">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="css/style.css">

  <script src="lib/angular/angular.min.js"></script>
  <script src="lib/angular/angular-ui-router.min.js"></script>

  <script src="js/app.js"></script>
  <script src="module/mainCtrl.js"></script>
  <script src="module/tab.index/indexCtrl.js"></script>
  <script src="hjx/homeCtrl.js"></script>
  <script src="hjx/backgroundCtrl.js"></script>
</head>
<body ng-controller="MainCtrl">
  <div ui-view></div>
</body>
</html>

用ng-app命令聲明app名字為myAPP,然后像其他HTML文件一樣,聲明引用的演示文件、腳本文件等,最后再聲明各模塊的控制器文件;這里必須先引入angularjs.min.js文件,再引用angular-ui-router.min.js文件,后者依賴前者;

為這個HTML文件聲明控制器,名為MainCtrl;在里層的一個div標簽中聲明視圖的容器,接下來的每個視圖都將放在這個div標簽中。

  然后,配置路由:

 1 var myApp = angular.module("myApp", ['ui.router']);
 2 myApp.config(function ($stateProvider, $urlRouterProvider) {
 3     $urlRouterProvider.otherwise('background');
 4     //$stateProvider.otherwise("home");
 5     $stateProvider
 6         .state("home", {
 7             url: "/home",
 8             templateUrl: "hjx/home.html",
 9             controller: 'homeCtrl'
10         })
11         .state("background", {
12             url: "/background",
13             templateUrl: "hjx/background.html",
14             controller: 'BackgroundCtrl'
15         })
16         .state("tabs", {
17             url: "/tabs",
18             templateUrl: "module/tabs.html"
19         })
20         .state("tabs.index", {
21             url:"/index",
22             templateUrl: "module/tab.index/index.html",
23             controller:'IndexCtrl'
24         })
25         .state("tabs.view", {
26             url:"/view",
27             templateUrl: "module/tab.view/view.html"
28         })
29         .state("single", {
30             url:"/single",
31             templateUrl: "module/single/single.html"
32         });
33     //$stateProvider.otherwise("home");
34 });

使用APP.config()函數為應用配置路由,這里注入$stateProvider和$urlRouterProvider服務,需要說明的是,按照AngularJs的教程只用$stateProvider來配置路由無法成功,報注入錯誤的錯誤信息,所以引入$urlRouterProvider服務,當沒有選擇任何視圖時,跳轉到$urlRouterProvider.otherwise('background')所指明的視圖中。路由的配置語法,跟switch語句很像,當狀態(state)滿足任一狀態時,顯示對應的視圖,並調用對應視圖的控制器,從而實現頁面跳轉,實則為狀態的跳轉。

  url:URL中顯示的路徑

  templateUrl:模板(視圖)路徑

  controller:模板(視圖)對應的控制器

  • 為什么在這里指明了控制器,狀態跟換時會自動找到對應的控制器進行調用呢?

  因為在index.html文件中,已經引用了此文件,也就是在引用一加載的時候,應用已經知道這個控制器了,在需要的時候,這個控制器就會被調用。

  • 路由配置有順序的概念嗎?

  沒有,只有對應關系,沒有先后關系,模板對應控制器,對應顯示的路徑。就像switch語句中每個case沒有先后,但每一個case對應一段需要執行的代碼。

  • $urlRouterProvider.otherwise('background');”語句可以寫后面嗎?

  可以,就好比switch語句的default可以寫前面也可以寫后面。

  最后,寫各個視圖:

自己寫的各個視圖可以按照功能模塊分成一個個文件夾,每一個寫好的控制器,都有唯一的一個名字。並且為了方便,會直接在index.html文件中引用。

值得提一下的是,為了能夠方便地跳轉到各個狀態,可以在index.html中視圖容器外添加一個菜單欄,這樣菜單欄不會隨着狀態的跳轉而不見,就方便隨意跳轉了。這種設計和許多官網的設計是一樣的,這說明,這種設計很實用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM