步驟1——靜態(tài)模板+步驟2---Angular模板

步驟1——靜態(tài)模板

這里將舉例展示Angular是如何增強標準HTML的。你將創(chuàng)建一個純粹的靜態(tài)HTML頁面,下面的步驟你會看到我們如何把HTML代碼轉為Angular模板,通過數(shù)據(jù)來動態(tài)顯示出相同的結果。

在這一步中,我們將添加兩部手機的基本信息到一個HTML頁面中。 頁面現(xiàn)在顯示了兩個手機的一個列表信息

工作區(qū)切換到步驟1

git checkout -f step-1

此時的app/index.html:

這里我們展示完整的html

<!doctype html>
<html lang="en" ng-app>
  <head>
    <meta charset="utf-8">
    <title>Google Phone Gallery</title>
    <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="app.css" />
    <script src="bower_components/angular/angular.js"></script>
  </head>
  <body>

    <ul>
      <li>
        <span>Nexus S</span>
        <p>
          Fast just got faster with Nexus S.
        </p>
      </li>
      <li>
        <span>Motorola XOOM? with Wi-Fi</span>
        <p>
          The Next, Next Generation tablet.
        </p>
      </li>
    </ul>

  </body>
</html>

步驟2——Angular模板

現(xiàn)在我們讓利用AngularJS讓頁面動態(tài)化。我們還將添加一些測試,這將檢驗我們添加的控制器代碼會執(zhí)行預期的工作。

其實有很多方法來構建應用程序,在Angular中,我們推薦采用Model-View-Controller(MVC——模型-視圖-控制器)的設計模式來解耦代碼與單獨的問題。利用這點,我們在model、view和controller中用到盡量少的Angular和Javascript。

程序將展示利用數(shù)據(jù)動態(tài)的列出3部手機列表。

工作區(qū)切換到步驟2

git checkout -f step-2

這里需要擴展一下視圖(view)和模板(template)

在Angular中,視圖是數(shù)據(jù)模型通過HTML模板的投影,這意味著任何數(shù)據(jù)模型的變化,Angular都會針對綁定點刷新視圖

現(xiàn)在我們再看一下,步驟2中的index.html

<!doctype html>
<html lang="en" ng-app="phonecatApp">
  <head>
    <meta charset="utf-8">
    <title>Google Phone Gallery</title>
    <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="app.css" />
    <script src="bower_components/angular/angular.js"></script>
    <script src="app.js"></script>
  </head>
  <body ng-controller="PhoneListController">

    <ul>
      <li ng-repeat="phone in phones">
        <span>{{phone.name}}</span>
        <p>{{phone.snippet}}</p>
      </li>
    </ul>

  </body>
</html>

這里我們用ngRepeat指令和兩個Angular表達式(expression)取代了硬編碼的電話列表:

  • li的ng-repeat="phone in phones"屬性就是一個Angular重復指令,它告訴angular在列表中為每個電話信息重復創(chuàng)建li元素,這里的li標簽就作為了模板。
    ![Uploading tutorial_02_000240.png . . .]
  • 在雙大括號中的表達式{{phone.name}}和{{phone.snippet}}會用實際的值替代。

這里,我們還添加了新的指令,叫做ng-controller,它為<body>標簽指定了一個PhoneListCtrl的控制器,對于這點

  • 在雙大括號中的表達式{{phone.name}}和{{phone.snippet}}指定的綁定,將參考我們程序中的數(shù)據(jù)模型,這些都是在我們的PhoneListCtrl的控制器進行設置的。

注意:我們已經(jīng)通過加載使用ng-app="phonecatApp"來指定了一個Angular數(shù)據(jù)模型,這里phonecatApp是我們數(shù)據(jù)模型的名字,這個模型被包含在PhoneListCtrl中。

tutorial_02.png

這里我們也需要擴展一下數(shù)據(jù)模型(Model)和控制器(Controller)

這里的數(shù)據(jù)模型(Model)(一個簡單的電話信息數(shù)值)是由PhoneListCtrl控制器(Controller)實例化的。這個控制器只是簡單的一個構造函數(shù),它操作了一個$scope參數(shù)。

app/app.js

'use strict';

// Define the `phonecatApp` module
var phonecatApp = angular.module('phonecatApp', []);

// Define the `PhoneListController` controller on the `phonecatApp` module
phonecatApp.controller('PhoneListController', function PhoneListController($scope) {
  $scope.phones = [
    {
      name: 'Nexus S',
      snippet: 'Fast just got faster with Nexus S.'
    }, {
      name: 'Motorola XOOM? with Wi-Fi',
      snippet: 'The Next, Next Generation tablet.'
    }, {
      name: 'MOTOROLA XOOM?',
      snippet: 'The Next, Next Generation tablet.'
    }
  ];
});

這里,我們定義了一個叫做PhoneListCtrl的控制器,并且注冊它到一個叫做phonecatApp的AngularJS數(shù)據(jù)模型中。注意,我們在<code><html></code>中的ng-app指令現(xiàn)在指定了一個phonecatApp的數(shù)據(jù)模型,這將在啟動Angular過程中加載。

盡管現(xiàn)在看來控制器并沒有做什么特別的事,但它是至關重要的。通過上下文數(shù)據(jù)模型,控制器允許我們建立模型和視圖之間的數(shù)據(jù)綁定。我們由此連接起二者間的描述、數(shù)據(jù)和邏輯,它們是如下工作的:

  • ngController指令定位到<code><body></code>標簽,引用指定名稱的控制器,PhoneListCtrl在JavaScript文件app.js中設定。
  • PhoneListCtrl控制器把數(shù)據(jù)鏈接到$scope來注入我們的控制器函數(shù)。這個scope是一個在應用定義時預定義(指定)的根作用范圍(root scope),然后這個控制器通過 <code><body ng-controller="PhoneListCtrl"></code>標簽綁定。

作用范圍

在Angular中作用范圍的概念至關重要。作用范圍被視作把模型、視圖和控制器粘合起來協(xié)同工作的膠水。Angular利用作用范圍來整合模板中的信息、數(shù)據(jù)模型和控制器,保持模型和視圖之間的獨立與同步。任何在模型中的變化都被反映到視圖中,在視圖中的操作變化也反映到數(shù)據(jù)模型。

參考資料

步驟1——靜態(tài)模板

步驟2——Angular模板

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Angular應用程序啟動 ng-app指令 指令指定Angular應用程序的根(root)元素,用于啟動Angu...
    angelwgh閱讀 533評論 0 1
  • AngularJS是什么 AngularJS的官方文檔這樣介紹它: 完全使用JavaScript編寫的客戶端技術。...
    oWSQo閱讀 1,443評論 0 10
  • 導言 最近在學AngularJS的實例教程PhoneCat Tutorial App,發(fā)現(xiàn)網(wǎng)上的中文教程都比較久遠...
    minxuan閱讀 5,058評論 8 27
  • 理想中的田園生活 剛走進這個農場時,我聞到了青草的香味,有很濃的田園氣息。 在第一天插完秧稍作休息之后,那里的管理...
    李心然xxxx閱讀 769評論 0 0
  • 為了避免壓力導致的意志力失效,我們需要找到能讓我們真正快樂的東西,而不是虛假的獎勵承諾,也不是空洞的改變承...
    cdgh閱讀 137評論 0 0

友情鏈接更多精彩內容