AngularJS實現(xiàn)todomvc

準備工作

參考http://todomvc.com/
todomvc-app-template下載:在相應的位置使用git復制項目git clone https://github.com/tastejs/todomvc-app-template.git
下載完后兔毙,在項目文件夾內npm install下載包
安裝好后棵譬,可以進行預覽。但是控制臺有找不到文件的錯誤


learn.json用于展現(xiàn)官方的說明欄,使用npm uninstall todomvc-common --save來卸載
在index.html中刪除末尾處<script src="node_modules/todomvc-common/base.js"></script>及head中的<link rel="stylesheet" href="node_modules/todomvc-common/base.css">

Angular 實現(xiàn)

模型準備
在項目文件夾中安裝AngularJSnpm install angular --save
在index.html中引入AngularJS <script src="node_modules/angular/angular.js"></script>
在js/app.js中編寫代碼。默認傳入的window對象用不到,改成angular對象。默認使用嚴格校驗模式。
初始化寺鸥,建立模塊與控制器,并初始化文本列表的Model

(function (angular) {
    'use strict';
    //應用程序的主要的模塊
    var myApp = angular.module('MyTodoMvc', []);
    // 注冊一個主要的控制器
    myApp.controller('MainController', ['$scope', function($scope) {    
    // 文本框需要一個模型
    $scope.text = '';

    // 任務列表也需要一個
    // 每一個任務的結構 { id: 1, text: '學習', completed: true }
    $scope.todos = [{  id: 1,  text: '學習', completed: false}, 
                 { id: 2, text: '睡覺', completed: false  }, 
                 { id: 3, text: '打豆豆', completed: true }, ];
        }] 
    )
})(angular);

將模塊與控制器引入到index.html

    <body ng-app="MyTodoMvc">
        <section class="todoapp" ng-controller="MainController">

將輸入框綁定model<input class="new-todo" placeholder="What needs to be done?" ng-model="text" autofocus>
將li用ng-repeat來顯示數(shù)據(jù)品山,將checkbox建立model胆建,label用表達式來輸出,edit時肘交,model顯示與label一致笆载。當todo.completed為true時,ng-class為completed

                    <li ng-repeat="todo in todos" ng-class="{completed:todo.completed}">
                        <div class="view">
                            <input class="toggle" type="checkbox" ng-model="todo.completed">
                            <label>{{todo.text}}</label>
                            <button class="destroy"></button>
                        </div>
                        <input class="edit" ng-model="todo.text">
                    </li>

修改item總數(shù)<span class="todo-count"><strong>{{todos.length}}</strong> item left</span>
實現(xiàn)添加功能
首先在controller加上add函數(shù)涯呻,add功能todos數(shù)組中添加1項凉驻,ID用數(shù)組長度+1,$scope.todos.length + 1复罐,text為輸入的text模型的值涝登,添加后,將text清空

    $scope.add = function() {
      $scope.todos.push({
        // 自動增長
        id: $scope.todos.length + 1,
        // 由于$scope.text是雙向綁定的效诅,add同時肯定可以同他拿到界面上的輸入
        text: $scope.text,
        completed: false
      });
      // 添加后胀滚,清空文本框
      $scope.text = '';
    };

將input放到form中,回車后進行表單提交乱投,通過ng-submit實現(xiàn)add函數(shù)

                <form ng-submit="add()">
                    <input class="new-todo" placeholder="What needs to be done?" ng-model="text" autofocus>
                </form>

實現(xiàn)刪除功能
添加remove功能咽笼,遍歷數(shù)組找到id,通過splice刪除(從第i位起戚炫,刪除1位)

    $scope.remove = function(id) {
      // 刪除誰
      for (var i = 0; i < $scope.todos.length; i++) {
        if ($scope.todos[i].id === id) {
          $scope.todos.splice(i, 1);
          break;
        }
      }
    };

在htmel中添加ng-click指向remove<button class="destroy" ng-click="remove(todo.id)"></button>
由于刪除后再添加剑刑,上面將id設成數(shù)組長度的方法會導致id重復,我們可以用隨機數(shù)來解決,將add方法中id更新成id: Math.random(),嘹悼,也可以添加個getid的方法叛甫,迭代獲取

    function getId() {
      var id = Math.random(); // 1 2
      for (var i = 0; i < $scope.todos.length; i++) {
        if ($scope.todos[i].id === id) {
          id = getId();
          break;
        }
      }
      return id;
    }

清空功能
建立一個新數(shù)值,將沒有completed的項放到這個數(shù)組中杨伙,然后將todos 數(shù)組指向這個新數(shù)組,就實現(xiàn)了clear completed功能萌腿。并實現(xiàn)檢查是否有完成項的功能

    $scope.clear = function() {
      var result = [];
      for (var i = 0; i < $scope.todos.length; i++) {
        if (!$scope.todos[i].completed) {
          result.push($scope.todos[i]);
        }
      }
      $scope.todos = result;
    };
    // 是否有已經(jīng)完成的
    $scope.existCompleted = function() {
      // 該函數(shù)一定要有返回值
      for (var i = 0; i < $scope.todos.length; i++) {
        if ($scope.todos[i].completed) {
          return true;
        }
      }
      return false;
    };

在button中引入這兩個function <button class="clear-completed" ng-click="clear()" ng-show="existCompleted()">Clear completed</button>
雙擊編輯
當前currentEditingId初始值設為-1限匣,即一個不可能存在的id,當編輯時,將其設為當前行的id米死,save方法停止編輯锌历,將currentEditingId設為-1

    // 當前編輯哪個元素
    $scope.currentEditingId = -1;
    $scope.editing = function(id) {
      $scope.currentEditingId = id;
    };
    $scope.save = function() {
      $scope.currentEditingId = -1;
    };

再li的ng-class中加上editing:todo.id===currentEditingId
使得text響應雙擊事件<label ng-dblclick="editing(todo.id)">{{todo.text}}</label>
將input edit用form包起來實現(xiàn)回車觸發(fā)save

<form ng-submit="save()">
    <input class="edit" ng-model="todo.text" ng-blur="save()">
</form>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市峦筒,隨后出現(xiàn)的幾起案子究西,更是在濱河造成了極大的恐慌,老刑警劉巖物喷,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件卤材,死亡現(xiàn)場離奇詭異,居然都是意外死亡峦失,警方通過查閱死者的電腦和手機扇丛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尉辑,“玉大人帆精,你說我怎么就攤上這事∷砥牵” “怎么了卓练?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長购啄。 經(jīng)常有香客問我襟企,道長,這世上最難降的妖魔是什么闸溃? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任整吆,我火速辦了婚禮,結果婚禮上辉川,老公的妹妹穿的比我還像新娘表蝙。我一直安慰自己,他們只是感情好乓旗,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布府蛇。 她就那樣靜靜地躺著,像睡著了一般屿愚。 火紅的嫁衣襯著肌膚如雪汇跨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天妆距,我揣著相機與錄音穷遂,去河邊找鬼。 笑死娱据,一個胖子當著我的面吹牛蚪黑,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼忌穿,長吁一口氣:“原來是場噩夢啊……” “哼抒寂!你這毒婦竟也來了?” 一聲冷哼從身側響起掠剑,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屈芜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后朴译,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體井佑,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年动分,在試婚紗的時候發(fā)現(xiàn)自己被綠了毅糟。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡澜公,死狀恐怖姆另,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情坟乾,我是刑警寧澤迹辐,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站甚侣,受9級特大地震影響明吩,放射性物質發(fā)生泄漏。R本人自食惡果不足惜殷费,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一印荔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧详羡,春花似錦仍律、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至窒盐,卻和暖如春草则,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蟹漓。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工炕横, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人葡粒。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓看锉,卻偏偏與公主長得像姿锭,于是被迫代替她去往敵國和親塔鳍。 傳聞我的和親對象是個殘疾皇子伯铣,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內容

  • ¥開啟¥ 【iAPP實現(xiàn)進入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 6,426評論 0 17
  • 這是vue官網(wǎng)的一個例子轮纫,挺適合作為vue應用的入門的腔寡。通過這個應用,我們能學到vue的【雙向綁定】,【v-for...
    進擊的前端閱讀 10,053評論 3 33
  • 作者:王芃 wpcfan@gmail.com 第一節(jié):初識Angular-CLI第二節(jié):登錄組件的構建第三節(jié):建立...
    接灰的電子產品閱讀 18,391評論 60 44
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理掌唾,服務發(fā)現(xiàn)放前,斷路器,智...
    卡卡羅2017閱讀 134,667評論 18 139
  • 早上起床的時候給孩子做的西紅柿雞蛋湯糯彬,下了一碗面條凭语,可吃飯時他卻說想吃方便面我說今早就吃這個,不吃就浪費了撩扒。明早再...
    笑看明天_30d5閱讀 161評論 0 0