使用Angular編寫TodoMVC Vol 1

序言

本系文章主要介紹如何通過使用AngularJS編寫一個簡單的TodoMVC應用。
本文中的代碼示例主要是根據todomvc
簡化而來的,希望通過讀者根據這個簡單的練習可以快速對AngularJS有個初步的認知。
需要的技能

  • npm
  • 基礎的JavaScript知識

我講學到什么

在本章節中我們將學習到如何搭建一個基本的angular應用以及以下相關的基礎指令:

  • ng-controller
  • ng-app
  • ng-repeat

0. TodoMVC

本次編寫的應用是一個簡單的Todo類代辦事宜的清單應用。


Paste_Image.png

1. 通過npm初始化工程

首先新建一個工程目錄,并新建一個package.json文件

{
  "private": true,
  "scripts": {
    "start": "http-server"
  },
  "dependencies": {
    "angular": "^1.4.3",
    "todomvc-common": "^1.0.0",
    "todomvc-app-css": "^1.0.1",
    "angular-route": "^ 1.4.3"
  },
  "devDependencies": {
    "http-server": "^0.9.0"
  }
}

其中的todomvc-common與todomvc-app-css都是todomvc中的基礎組件包。
最后運行npm install來安裝關聯組件包。

2. 工程目錄結構

我們將所有的js源文件放置在js文件夾中,并且按照最簡單的功能區分的方式來組織所有angular源文件,目錄結構如下。


Paste_Image.png

3.編寫入口app.js與index.html

app.js

首先,angular應用中所有的組件都是 以module為中心進行構建的。而一個應用則需要一個主要的module來組織。我們會編寫一個app.js來聲明我們todomvc應用的moudl:todomvc,并且依賴angular的路由組件庫ngRoute,其關系如下圖所示。

Paste_Image.png
(function(){
    'use strict';

    angular.module('todomvc', ['ngRoute'])
        .config(routerConfig);
    //注入依賴聲明
    routerConfig.$inject = ['$routeProvider'];
    function routerConfig($routeProvider){
    };
})();

index.html

在我們的主入口html文件中我們只引入todomvc的css文件,以及在底部引入我們的app.js。

<!doctype html>
<html lang="en" data-framework="angularjs">
<head>
    <meta charset="utf-8">
    <title>AngularJS ? TodoMVC</title>
    <link rel="stylesheet" href="node_modules/todomvc-common/base.css">
    <link rel="stylesheet" href="node_modules/todomvc-app-css/index.css">
</head>
<body ng-app="todomvc">
</body>
</html>

這段代碼中在body標簽我們使用了ng-app指令來告知angular在這段代碼片段中我們將啟動todomvc的module解釋與編譯html中的指令代碼與angular表達式。
而通常ng-app中的module名稱是與整個應用的主模塊名稱一致的。

\\ in app.js
angular.module('todomvc')

\\in index.html
<body ng-app='todomvc'>
</body>

4. 編寫我們第一個controller

4.1 AngularJS與JQuery的一些區別

在編寫angular應用的時候有一些與原來我們使用jquery的設計想法最不一樣的是在angular中大部分情況是以邏輯與數據做出最先設計的部分,而不是jquery。
angular與jquery最大的不同便是,angularjs其實是一個生成編譯的html代碼的運行時環境,而jquery是直接在html上操作dom從而達到修改的html代碼的目的。

4.2 編寫TodoController

我們整個應用只會使用者一個controller,主要用于添加任務、顯示任務與刪除任務的功能。
首先,整個應用的唯一實體記錄就是任務task,我們如果簡單設計todo task的數據結構,使每個任務都有一個顯示標題的屬性:

{
  "title": "string"
}

我們在TodoController中初始化一個數組用于保存我們需要在頁面上顯示的任務。

(function(){
    'use strict';

    angular
        .module('todomvc')
        .controller('TodoController',TodoController);

    TodoController.$inject = [];
    function TodoController(){
        var vm = this;
        vm.tasks = [
            {
                title: "第一個任務"
            },
            {
                title: "第二個任務"
            }
        ]
    }
})();

在編寫完畢controller的代碼后,以文件名todo.controller.js保存在js/controllers文件下并且在html的script標簽區域引入該文件。

4.3 顯示任務列表

4.3.1 界面設計

TodoMVC的界面布局主要分為兩塊上面是頭部分顯示標題todos,而下半部分又分為添加任務區域和顯示任務清單區域。


Paste_Image.png

4.3.2 修改index.html

ng-controller

<body ng-app="todomvc" ng-controller="TodoController as vm">

首先我們在body標簽區域增加ng-controller指令用于告知angular使用TodoController來操作折斷html模板。
其次再通過"TodoController as vm"的語法使body標簽區域中的都可以通過vm變量來獲取TodoController中的變量,從而使View層可以獲取Controller中的Model數據,只是在angular中Model層的概念比較模糊。

Angular的MVC

然后在body區域中編寫header標題與列表內容

    <header id="header">
        <h1>todos</h1>
    </header>
    <section id="main">
        <ul id="todo-list">
            <li ng-repeat="task in vm.tasks">
                <div class="view">
                    <label>{{task.title}}</label>
                </div>
            </li>
        </ul>
    </section>

ng-repeat指令
ng-repeat指令是angular模板中的類似foreach迭代的指令,根據目標集合的數量重復顯示當前代碼片段,在我們的應用中,每一個任務task記錄都會生成一行li代碼用于顯示其標題title字段的信息,類似下面的代碼片段。

<li>
  <label>第一個任務</label>
</li>

故我們使用ng-repeat代碼來迭代controller中的tasks數組中的所有任務記錄。

   //in controller
    vm.task = [
            {
                title: "第一個任務"
            },
            {
                title: "第二個任務"
            }
        ];


  //in html template
  <li ng-repeat="task in vm.tasks">
    <div class="view">
      <label>{{task.title}}</label>
    </div>
  </li>

4.4 運行應用

使用終端打開至應用目錄并輸入npm start通過http-server啟動一個服務器進程,使我們可以通過瀏覽器訪問我們編寫的應用。


啟動成功,可以通過8080端口訪問應用

我們在瀏覽器中輸入127.0.0.1:8080來訪問我們剛剛編寫的todo應用。


顯示了兩條任務信息

小結

在本章的練習中,我們對angular有了基本的認知,知道如何

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容