AngularJS小練習

来源:http://www.cnblogs.com/JimmySeraph/archive/2017/05/08/6824247.html
-Advertisement-
Play Games

首先可能需要安裝npm,並且配置環境. 1.打開Dos(命令提示符).按Windows徽標鍵+R組合鍵,輸入cmd然後按回車鍵進入Dos. 2.安裝Yeoman.在Dos下輸入npm install -g yo. 3.安裝Grunt.在Dos下輸入npm install -g grunt-cli. ...


首先可能需要安裝npm,並且配置環境.

1.打開Dos(命令提示符).按Windows徽標鍵+R組合鍵,輸入cmd然後按回車鍵進入Dos.

2.安裝Yeoman.在Dos下輸入npm install -g yo.

3.安裝Grunt.在Dos下輸入npm install -g grunt-cli.

4.安裝Bower.在Dos下輸入npm install -g bower.

5.安裝Generator-angular的0.9.8版本.在Dos下輸入npm install -g [email protected]

6.安裝Generator-karma.在Dos下輸入npm install -g generator-karma.

7.安裝Angular-strap.在Dos下輸入npm install -g angular-strap.

8.安裝Bootstrap.在Dos下輸入npm install -g bootstrap.

9.進入AngularJs的項目文件夾,我的是:D:\AngularJsItem,在這裡新建TemplateItem文件夾.然後在Dos下進入文件夾,先輸入d:回車,先複製路徑,然後輸入cd+空白+滑鼠右鍵粘貼,然後回車,再輸入yo angular TemplateItem,按用戶要求自動生成項目.第一個問題是:Would you like to use Sass(With Compass)?這個輸入n然後回車就好.暫時沒用上.

第二個問題是:Would you like to include Bootstrap?輸入y然後回車,因為項目之後要使用BootStrap.第三個問題是:Which modules would you like to include?(Press <space> to select)... .這個選中全部,然後按回車就好了(如果前面括弧裡面有*,就是已選中狀態).

10.如果缺少以上圖片中的文件夾.需要將這些也安裝.在Dos下輸入npm install -g 文件夾名稱.缺少哪個就安裝哪個.

11.接下來在項目裡面添加bower_components文件夾,如果有就不用新建.直接到npm目錄,我的是D:\NodeJs\Install\node_global.-g都是安裝到這個目錄.找到node_modules目錄,將裡面的文件夾複製到bower_components目錄下.

12.在項目添加一個app文件夾(和bower_components同級),如果有就直接在app目錄下新建文件夾bootstrap,然後在bootstrap下麵新建index.html文件.

下麵是我的index.html的頁面代碼:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title></title>
<link href="../../bower_components/bootstrap/dist/css/bootstrap.css" rel="stylesheet"/>
</head>
<body ng-app="userApp">
  <stk-userlist-panel></stk-userlist-panel>

  <script src = "../../bower_components/jquery/dist/jquery.js"></script>
  <script src = "../../bower_components/angular/angular.js"></script>
  <script src = "../../bower_components/angular-animate/angular-animate.js"></script>
  <script src = "../../bower_components/angular-cookies/angular-cookies.js"></script>
  <script src = "../../bower_components/angular-resource/angular-resource.js"></script>
  <script src = "../../bower_components/angular-route/angular-route.js"></script>
  <script src = "../../bower_components/angular-sanitize/angular-sanitize.js"></script>
  <script src = "../../bower_components/angular-touch/angular-touch.js"></script>
  <script src = "../../bower_components/angular-strap/dist/angular-strap.js"></script>
  <script src = "../../bower_components/lodash/dist/lodash.js"></script>
  <script type="text/javascript">
    var app = angular.module('userApp', [
      'ngAnimate',
      'ngCookies',
      'ngResource',
      'ngRoute',
      'ngSanitize',
      'ngTouch',
      'mgcrea.ngStrap'
    ]);

    app.service('userService', function userService() {
    // AngularJS will instantiate a singleton by calling "new" on this function
    //1輔助方法: 從localStorage中載入監視列表
    var loadModel = function(){
      var model = {
        userList: localStorage['userManager.userList'] ?
        JSON.parse(localStorage['userManager.userList']) : []
      };
      return model;
    };

    //2輔助方法: 將監視列表保存到localStorage中
    var saveModel = function(){
      localStorage['userManager.userList'] =
      JSON.stringify(Model.userList);
    };

    //3輔助方法: 使用lodash找到指定ID的監視列表
    var findById = function(cid){
        return _.find(Model.userList, function(user){
        return parseInt(user.cid) === parseInt(cid);
      });
    };

    //4輔助方法:以編號查找編號是否存在,因為編號是來標誌對象的(唯一的)
    var findIndexByCid = function(cid){
      var index = -1;
      var userArr = JSON.parse(localStorage['userManager.userList']);
      for(var i = 0; i < userArr.length; i++){
        if(parseInt(userArr[i].cid) === parseInt(cid)){
          index = i;
          break;
        }
      }
      return index;
    }

    //4返回所有監視列表或者按指定的ID進行查找
    this.query = function(cid){
      if(cid){
        return findById(cid);
      }else{
        return Model.userList;
      }
    };

    //5在監視列表模型中保存一個新的監視列表
    this.save = function(user){
      if(findIndexByCid(user.cid) > 0){
        alert('編號已存在,編號是唯一的,請換一個編號!');
        return 'failed';
      }else{
        Model.userList.push(user);
        saveModel();
        return 'success';
      }
    };

    //6從監視列表模型中移除指定的監視列表
    this.remove = function(user){
      _.remove(Model.userList, function(userModel){
      return userModel.cid === user.cid;
    });
      saveModel();
    };

    //修改方法
    this.update = function(user){
      var userArr = JSON.parse(localStorage['userManager.userList']);
      var index = findIndexByCid(user.cid);
      userArr[index] = user;
      saveModel();
    }

    //7為這個單例服務初始化模型
    var Model = loadModel();
    });

    //指令
    app.directive('stkUserlistPanel', function ($location, $modal, userService) {
    return {
      templateUrl: 'templates/userlist-panel.html',
      restrict: 'E',
      cache: false,
      scope: {},
      link: function($scope){
      //2初始化變數
      $scope.user = {};

      //添加頁面
      var addListModal = $modal({
        scope: $scope,
        templateUrl: 'templates/addlist-modal.html',
        show: false
      });

      //修改頁面
      var updateListModal = $modal({
        scope: $scope,
        templateUrl: 'templates/updatelist-modal.html',
        show: false
      });

      //3將服務中的模型綁定到該作用域
      $scope.userList = userService.query();

      //4顯示addlist modal
      $scope.showModal = function(){
      $scope.user = {};
        addListModal.$promise.then(addListModal.show);
      };

      //5根據模態框中的欄位創建一個新的列表
      $scope.createUser = function(){
        var status = userService.save($scope.user);
        if(status == 'success'){
          addListModal.hide();
          $scope.user = {};
        }
      };

      //6刪除目標列表並重定向至主頁
      $scope.deleteList = function(user){
        userService.remove(user);
        $location.path('/');
      };

      //進入修改頁面的函數
      $scope.showUpdateModal = function(user){
        $scope.user = user;
        updateListModal.$promise.then(updateListModal.show);
      }

      //修改的函數
      $scope.updateUser = function(user){
        userService.update(user);
        updateListModal.hide();
      };
    }
  };
});

</script>
</body>
</html>

13.在bootstrap下新建一個文件夾templates,在裡面新建三個html文件.

userlist-panel.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>userlist-panel</title>
<style>

</style>
</head>
<body>
  <div class = "panel panel-info">
    <div class = "panel-heading">
      <span class = "glyphicon glyphicon-eye-open"></span>
      UserList
      <!-- 1在單擊時調用showModal()處理器 -->
      <button type = "button"
        class = "btn btn-success btn-xs pull-right"
        ng-click = "showModal();"
      >
        <span class = "glyphicon glyphicon-plus"></span>
      </button>
    </div>

    <div class = "panel-body">
      <!-- 2如果沒有監視列表存在,就顯示幫助文本 -->
      <div ng-if = "!userList.length" class = "text-center">
        Use
        <span class = "glyphicon glyphicon-plus">
        </span>
          to create a user
      </div>

      <div class = "list-group">
        <!-- 3重覆監視列表中的每個列表,並創建鏈接 -->

        <div class="list-group-item"
          ng-repeat = "u in userList track by $index">

          <a ng-click = "showUpdateModal(u);">
            {{ u.cid }}
          </a>

          <a ng-click = "showUpdateModal(u);">
            {{ u.name }}
          </a>

          <a ng-click = "showUpdateModal(u);">
            {{ u.description }}
          </a>

          <a>
            <!-- 4調用deleteList()處理器刪除該列表 -->
            <button type = "button" class = "close"
              ng-click = "deleteList(u);"
            >
              &times;
            </button>
          </a>

        </div>


      </div>


    </div>


  </div>
</body>
</html>

 

addlist-modal.html文件代碼:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>addlist-modal</title>
<style>

</style>
</head>
<body>
  <div class = "modal" tabindex = "-1" role = "dialog">
    <div class = "modal-dialog">
      <div class = "modal-content">
        <div class = "modal-header">
          <!-- 1在單擊時調用$modal.$hide() -->
          <button type = "button" class = "close"
            ng-click = "$hide();"
          >
            &times;
          </button>

          <h4 class = "modal-title">
            Create New User
          </h4>
        </div>

        <!-- 2命名該表單用於驗證過程 -->
        <form role = "form" id = "add-user" name = "listForm">
          <div class = "modal-body">

            <div class = "form-group">
              <label for = "user-name">
                編號
              </label>

              <!-- 3將輸入綁定到userList.firstname -->
              <input type = "text"
                class = "form-control"
                id = "user-cid"
                placeholder = "cid this user"
                ng-model = "user.cid"
                required
              />
            </div>

            <div class = "form-group">
              <label for = "user-name">
                姓名(昵稱)
              </label>

            <!-- 3將輸入綁定到userList.firstname -->
            <input type = "text"
              class = "form-control"
              id = "user-name"
              placeholder = "name this user"
              ng-model = "user.name"
              required
            />
          </div>

          <div class = "form-group">
            <label for = "user-description">
              描述
            </label>

            <!-- 4將輸入綁定到userlist.lastname -->
            <input type = "text"
              class = "form-control"
              id = "user-description"
              maxlength = "40"
              placeholder = "description this user"
              ng-model = "user.description"
              required
            />
          </div>

        </div>

        <div class = "modal-footer">
          <!-- 5在單擊時創建列表,但如果表單是無效的,那麼它將處於禁用狀態 -->
          <button type = "submit"
            class = "btn btn-success"
            ng-click = "createUser();"
            ng-disabled = "!listForm.$valid"
          >
            Create
          </button>

          <button type = "button"
            class = "btn btn-danger"
            ng-click = "$hide();"
          >
            Cancel
          </button>
        </div>
      </form>
    </div>
  </div>
</div>
</body>
</html>

 

 

updatelist-modal.html

 

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>updatelist-modal</title>
<link href="../../bower_components/bootstrap/dist/css/bootstrap.css" rel="stylesheet"/>
<style>

</style>
</head>
<body>
  <div class = "modal" tabindex = "-1" role = "dialog">
    <div class = "modal-dialog">
      <div class = "modal-content">
        <div class = "modal-header">
          <!-- 1在單擊時調用$modal.$hide() -->
          <button type = "button" class = "close"
            ng-click = "$hide();"
          >
            &times;
          </button>

          <h4 class = "modal-title">
            Update Old User
          </h4>
        </div>

        <!-- 2命名該表單用於驗證過程 -->
        <form role = "form" id = "add-user" name = "listForm">
          <div class = "modal-body">

            <div class = "form-group">
              <label for = "user-name">
                編號
              </label>

              <!-- 3將輸入綁定到userList.firstname -->
              <input type = "text"
                class = "form-control"
                id = "user-cid"
                placeholder = "cid this user"
                ng-model = "user.cid"
                ng-disabled="true"
                required
              />
            </div>

            <div class = "form-group">
              <label for = "user-name">
                姓名(昵稱)
              </label>

              <!-- 3將輸入綁定到userList.firstname -->
              <input type = "text"
                class = "form-control"
                id = "user-name"
                placeholder = "name this user"
                ng-model = "user.name"
                required
              />
            </div>

            <div class = "form-group">
              <label for = "user-description">
                描述
              </label>

              <!-- 4將輸入綁定到userlist.lastname -->
              <input type = "text"
                class = "form-control"
                id = "user-description"
                maxlength = "40"
                placeholder = "description this user"
                ng-model = "user.description"
                required
              />
            </div>

          </div>

          <div class = "modal-footer">
            <!-- 5在單擊時創建列表,但如果表單是無效的,那麼它將處於禁用狀態 -->
            <button type = "submit"
              class = "btn btn-success"
              ng-click = "updateUser(user);"
              ng-disabled = "!listForm.$valid"
            >
              Update
            </button>

            <button type = "button"
              class = "btn btn-danger"
              ng-click = "$hide();"
            >
              Cancel
            </button>
          </div>
        </form>
      </div>
    </div>
  </div>
</body>
</html>

 

最後的效果圖:

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • express + randomjson 模擬後端服務,前端伺服器(比如webpack, nigix等)將請求代理到該伺服器地址即可實現前後端分離 ...
  • 首先背景就是測試同學發現我們的網頁在ie9中展示不正確,實際是所有非同步的介面都沒有執行。然後我就開始了苦逼的排查過程。我們所有非同步介面都是使用jQuery的ajax方法發出的,使用的jquery版本是1.11.0。 我最先定位到的是ajax方法返回status=0,statusText=No Tra ...
  • 一、內聯式css樣式,直接寫在現有的HTML標簽中 1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 5 <title>認識html標簽< ...
  • history.back(-1):直接返回當前頁的上一頁,數據全部消息,是個新頁面 history.go(-1):也是返回當前頁的上一頁,不過表單里的數據全部還在 ...
  • #myCarousel img{ width: 100%; height: 100%; object-fit: cover; } ...
  • 1 /* 遮罩插件 2 * 可選選項 3 * smBoxBg 小方格遮罩顏色 預設 #FFFFFF 4 * backgroudColor 大遮罩顏色 預設 #000000 5 * backgroundImage 動態圖片 預設 loading.gif 6 * text 文字信息 預設 載入中.... ...
  • 背景 很多很多傳統的Web開發者還在用著傳統的jquery和ES5,大家都知道現在的前端如火如荼,但是眼花繚亂的框架和層出不窮的新概念,讓很多人無從下手,本文從0開始,帶你一步步由jquery操作DOM轉型成為一個新思想的前端開發者。沒有過多的引申和概念解釋。先上手實踐,再回頭體會。讓我們開始。(本 ...
  • localStorage是HTML5在在客戶端存儲數據的新方法,存儲的數據沒有時間限制。 localStorage的主要API: localStorage.setItem(key,value); key是保存數據的變數,value是保存的數據 localStorage.getItem(key); 讀 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...