• AngularJS小练习20170508


    首先可能需要安装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 generator-angular@0.9.8

    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:NodeJsInstall ode_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>

    最后的效果图:

    2015年10月-2016年3月 总计:5个月.
    2016年11月-2017年6月 总计:7个月.
    2017年7月-2018年4月 总计:9个月.
    2018年5月-2018年5月 总计:1个月.
    2018年6月-2018年12月 总计:6个月.
    2019年1月-2019年12月 总计11个月.
    2020年2月-2021年2月 总计13个月.
    所有总计:5+7+9+1+6+11+13=52个月(4年4个月).
    本人认同二元论.我是理想主义者,现实主义者,乐观主义者,有一定的完美主义倾向.不过,一直都是咸鱼(菜鸟),就算有机会,我也不想咸鱼翻身.(并不矛盾,因为具体情况具体分析)
    英语,高等数学,考研,其他知识学习打卡交流QQ群:946556683
  • 相关阅读:
    Spark Sort-Based Shuffle具体实现内幕和源码详解
    Spark-2.0原理分析-shuffle过程
    Spark Shuffle 中 JVM 内存使用及配置内幕详情
    Spark中的Spark Shuffle详解
    Spark Shuffle Write阶段磁盘文件分析
    Spark Sort Based Shuffle内存分析
    Spark Storage(二) 集群下的broadcast
    Spark SQL metaData配置到Mysql
    TweenJS----前端常用的js动画库,缓动画和复制动画的制作,效果非常好。
    Storm入门
  • 原文地址:https://www.cnblogs.com/JimmySeraph/p/6824247.html
Copyright © 2020-2023  润新知