热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Angularjs+Bootstrap制作的一个TODOList

看了一个关于Angularjs的视频,视频内容讲解的是如何制作一款TODOlist形式的SPA(SimplePageApplication,单页面应用)

看了一个关于Angularjs的视频,视频内容讲解的是如何制作一款TODO list形式的SPA(Simple Page Application,单页面应用)。为了增强理解,下面写了一篇文章,用以复习巩固。


    • 准备
      • Angularjs下载
        • CDN加速
        • npm 方式
        • 常规方式
      • Bootstrap下载
    • 知识储备
      • MVC 架构
        • ng-app
        • ng-controller
        • ng-model
      • 事件基础
        • ng-click
    • 完整代码
      • mainjs
      • todolisthtml
      • 页面效果
    • 代码详解
      • 创建应用
      • 创建控制器
      • 完善功能函数
    • 总结




准备


Angularjs下载

说是下载,其实只要能在我们的页面中引用到Angularjs即可。可以有如下方式。


CDN加速

使用国内的CDN加速服务也是可以的。

<script src&#61;"http://code.angularjs.org/angular-1.0.1.min.js">script>

npm 方式

使用Nodejs的包管理工具也挺方便的&#xff0c;基本上来说两步就搞定了。
首先进入到我们将要写代码的文件夹。


  • 安装Angularjs&#xff1a;

    npm install angular

  • 页面上引入使用&#xff1a;


    <script src&#61;"node_modules/angular/angular.js">script>


常规方式

常规方式就是我们手动的下载相关的文件&#xff0c;然后手动的引入&#xff0c;由于比较繁琐。这里不再过多的叙述。


Bootstrap下载

作为一款很流行的现代化的前端框架&#xff0c;Bootstrap可谓是风头尽出了。下载地址


知识储备


MVC 架构

Angularjs 核心采用MVC架构&#xff0c;事件驱动应用。我也是刚接触&#xff0c;所以理解的也不是很到位。有错误的话&#xff0c;还望博友指出来。


ng-app

其作为整个单页面的大管家&#xff0c;app 即application&#xff0c;应用的意思。我们的单页面的服务就充当了这么一个app的作用。


一般来说&#xff0c;ng-app 要作为ng-controller的父容器来嵌套。否则可能不会出现预期的结果



ng-controller

控制器&#xff0c;页面上应用的左膀右臂&#xff0c;控制器的存在简化了模块之间的耦合性&#xff0c;使得代码编写的更加规范和简单。


ng-model

模型处理&#xff0c;一般会和页面元素进行绑定输出&#xff0c;实现无刷新的页面效果。


事件基础


ng-click

在我们的单页面应用中&#xff0c;声明了此属性的元素就具备了点击事件的功能。至于调用的是那一部分的函数&#xff0c;其实是和该元素所在的容器内相关的。

也就是说&#xff0c;点击事件对应的函数是书写在相关控制器里面的用于完成特定的功能的代码。


完整代码

下面 贴出来本例详细的代码


main.js

(function(window){// 注册一个应用程序主模块var todoapp &#61; window.angular.module(&#39;todoapp&#39;,[]);// 注册控制器// window.angular.module(&#39;todoapp&#39;)todoapp.controller(&#39;maincontroller&#39;,[&#39;$scope&#39;,function($scope){// $scope 作用就是往视图中添加元素// 文本框中的数值$scope.text &#61; &#39;&#39;; // 会使用双向绑定的数据类型// 为方便页面展示&#xff0c;手动添加一串列表$scope.todolist &#61; [{text:&#39;Angularjs&#39;,done:false},{text:&#39;Bootstrap&#39;,done:false}];// 添加函数&#xff0c;响应交互$scope.add &#61; function(){var text &#61; $scope.text.trim();if(text) {$scope.todolist.push({text:text,done:false});$scope.text &#61; &#39;&#39;;}}// 点击删除按钮的响应事件$scope.delete &#61; function(todo){var index &#61; $scope.todolist.indexOf(todo)$scope.todolist.splice(index,1);// 起删除的作用}// 获取已完成的事件的个数&#xff0c;按照checkbox的选择与否实现// 由于页面是动态变化的&#xff0c;所以要使用函数&#xff0c;或者干脆使用模型绑定&#xff0c;但是那样的话会稍微麻烦一点$scope.doneCount &#61; function(){// 使用filter来实现var temp &#61; $scope.todolist.filter(function(item){return item.done;// 返回true表示当前的数据满足条件&#xff0c;事件已完成});return temp.length;}}]);})(window)

todolist.html


<html>
<head><meta charset&#61;"utf-8"><title>Angularjs 整合Bootstrap实现任务清单title>
<link href&#61;"http://apps.bdimg.com/libs/bootstrap/3.3.0/css/bootstrap.min.css" rel&#61;"stylesheet"><style>.container {max-width: 720px;}.done {color: #cca;}.checkbox {margin-right: 12px;margin-bottom: 0;}.done > .checkbox > label > span {text-decoration: line-through;}style><script src&#61;"node_modules/angular/angular.js">script><script src&#61;"myjs/app.js">script>
head>
<body ><div class&#61;"container" ng-app&#61;"todoapp"><header><h1 class&#61;"display-3">TODO LISTh1><hr>header><section ng-controller&#61;"maincontroller"><form class&#61;"input-group input-group-lg"><input type&#61;"text" class&#61;"form-control" ng-model&#61;"text" name&#61;""><span class&#61;"input-group-btn"><button class&#61;"btn btn-secondary" ng-click&#61;"add()">Addbutton>span>form><ul class&#61;"list-group" style&#61;"padding:12px;"><li class&#61;"list-group-item" ng-class&#61;"{&#39;done&#39;:item.done}" ng-repeat&#61;"item in todolist" ><button type&#61;"button" class&#61;"close" aria-label&#61;"close" ng-click&#61;"delete(item)"><span aria-hidden&#61;"true">×span><span class&#61;"sr-only">Closespan>button><div class&#61;"checkbox"><label><input type&#61;"checkbox" ng-model&#61;"item.done"><span>{{item.text }}span>label>div>li>ul><p>总共 <strong>{{todolist.length }}strong>个任务&#xff0c;已完成 <strong>{{doneCount()}}strong>p>section>div>body>
html>

页面效果

效果图


代码详解

代码中最外边包裹的一层代码可以很好的起到临时空间的效果&#xff0c;防止命名空间的污染。

(function(window){// to do something
}
)
(window)

注意最后面的(window)不可缺少。



创建应用

// 注册一个应用程序主模块
var todoapp &#61; window.angular.module(&#39;todoapp&#39;,[]);

创建控制器

todoapp.controller(&#39;maincontroller&#39;// 这里的$scope也就起到了容器的作用&#xff0c;声明了变量的可见范围。,[&#39;$scope&#39;,function($scope){// $scope 作用就是往视图中添加元素// 文本框中的数值$scope.text &#61; &#39;&#39;; // 会使用双向绑定的数据类型// 为方便页面展示&#xff0c;手动添加一串列表$scope.todolist &#61; [{text:&#39;Angularjs&#39;,done:false},{text:&#39;Bootstrap&#39;,done:false}];}]);

完善功能函数

// 添加函数&#xff0c;响应交互$scope.add &#61; function(){var text &#61; $scope.text.trim();if(text) {$scope.todolist.push({text:text,done:false});$scope.text &#61; &#39;&#39;;}}// 点击删除按钮的响应事件$scope.delete &#61; function(todo){var index &#61; $scope.todolist.indexOf(todo)$scope.todolist.splice(index,1);// 起删除的作用}// 获取已完成的事件的个数&#xff0c;按照checkbox的选择与否实现// 由于页面是动态变化的&#xff0c;所以要使用函数&#xff0c;或者干脆使用模型绑定&#xff0c;但是那样的话会稍微麻烦一点$scope.doneCount &#61; function(){// 使用filter来实现var temp &#61; $scope.todolist.filter(function(item){return item.done;// 返回true表示当前的数据满足条件&#xff0c;事件已完成});return temp.length;}

总结

代码不多&#xff0c;思想很深邃。更多内容可以参照
Angularjs 中文学习手册


推荐阅读
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 【前端开发】深入探讨 RequireJS 与性能优化策略
    随着前端技术的迅速发展,RequireJS虽然不再像以往那样吸引关注,但其在模块化加载方面的优势仍然值得深入探讨。本文将详细介绍RequireJS的基本概念及其作为模块加载工具的核心功能,并重点分析其性能优化策略,帮助开发者更好地理解和应用这一工具,提升前端项目的加载速度和整体性能。 ... [详细]
  • Django框架下的对象关系映射(ORM)详解
    在Django框架中,对象关系映射(ORM)技术是解决面向对象编程与关系型数据库之间不兼容问题的关键工具。通过将数据库表结构映射到Python类,ORM使得开发者能够以面向对象的方式操作数据库,从而简化了数据访问和管理的复杂性。这种技术不仅提高了代码的可读性和可维护性,还增强了应用程序的灵活性和扩展性。 ... [详细]
  • Understanding the Distinction Between decodeURIComponent and Its Encoding Counterpart
    本文探讨了 JavaScript 中 `decodeURIComponent` 和其编码对应函数之间的区别。通过详细分析这两个函数的功能和应用场景,帮助开发者更好地理解和使用它们,避免常见的编码和解码错误。 ... [详细]
  • 本文介绍了如何通过掌握 IScroll 技巧来实现流畅的上拉加载和下拉刷新功能。首先,需要按正确的顺序引入相关文件:1. Zepto;2. iScroll.js;3. scroll-probe.js。此外,还提供了完整的代码示例,可在 GitHub 仓库中查看。通过这些步骤,开发者可以轻松实现高效、流畅的滚动效果,提升用户体验。 ... [详细]
  • 在主从复制架构中,Bingo_MySQL 同步工具的应用与优化具有重要意义。为确保高效同步,建议使用相同或兼容的 MySQL 版本,并确保两台服务器位于同一局域网内,且网络连接畅通无阻。若无法 ping 通,请检查 IP 配置及防火墙设置,以保证网络连通性。此外,合理的配置参数和定期维护也是提升同步性能的关键因素。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 在《孙鑫VC++讲座笔记第三讲》中,深入探讨了MFC应用程序的架构,并详细解析了SDI程序的流程图。AfxWinMain()函数位于WINMAIN.CPP文件中,其主要职责包括调用AfxWinInit()进行框架初始化,以及通过pApp->InitApplication()执行应用内部的初始化过程。此外,还详细分析了各个关键函数的作用及其在程序启动过程中的具体功能。 ... [详细]
  • 当前,众多初创企业对全栈工程师的需求日益增长,但市场中却存在大量所谓的“伪全栈工程师”,尤其是那些仅掌握了Node.js技能的前端开发人员。本文旨在深入探讨全栈工程师在现代技术生态中的真实角色与价值,澄清对这一角色的误解,并强调真正的全栈工程师应具备全面的技术栈和综合解决问题的能力。 ... [详细]
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 修复一个 Bug 竟耗时两天?真的有那么复杂吗?
    修复一个 Bug 竟然耗费了两天时间?这背后究竟隐藏着怎样的复杂性?本文将深入探讨这个看似简单的 Bug 为何会如此棘手,从代码层面剖析问题根源,并分享解决过程中遇到的技术挑战和心得。 ... [详细]
author-avatar
小美女金猪宝宝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有