前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >AngularJS基础入门初探

AngularJS基础入门初探

作者头像
Edison Zhou
发布于 2018-08-20 09:42:58
发布于 2018-08-20 09:42:58
1.9K00
代码可运行
举报
文章被收录于专栏:EdisonTalkEdisonTalk
运行总次数:0
代码可运行

一、AngularJS简介

1.1 什么是AngularJS

  (1)一款非常优秀的前端JS框架,可以方便实现MVC/MVVM模式

  (2)由Misko Hevery 等人创建,2009年被Google所收购,用于其多款产品

  (3)Google目前有一个全职的开发团队继续开发和维护这个库

  (4)有了这一类框架就可以轻松构建SPA单页应用程序

  (5)通过指令扩展了HTML,通过表达式绑定数据到HTML,轻松实现双向绑定

单页Web应用(single page web application,SPA),就是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。

  1. 首先,最大的好处是用户体验,对于内容的改动不需要加载整个页面。这样做好处颇多,因为数据层和UI的分离,可以重新编写一个原生的移动设备应用程序而不用(对原有数据服务部分)大动干戈。
  2. 单页面Web应用层程序最根本的优点是高效。它对服务器压力很小,消耗更少的带宽,能够与面向服务的架构更好地结合。

1.2 AngularJS有哪些特性

  (1)MVC,MVVM

  (2)模块化

  (3)自动化双向数据绑定

  (4)指令系统(非侵入式API

二、第一个AngularJS程序

2.1 下载AngularJS

  方式一:NPM(npm install angular)

  方式二:下载angular.js包(https://github.com/angular/angular.js/releases

  方式三:使用CDN上的angular.js(http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js)

  这里我们使用方式三,CDN方式。

2.2 体验双向数据绑定

  新建一个HTML页,输入一下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Hello Angular</title>
    <meta charset="utf-8" />
    <style type="text/css">
        #main {
            text-align: center;
        }
    </style>
</head>
<body>
    <div id="main" ng-app ng-init="name='World'">
        <p>Your name:<input type="text" ng-model="name" /></p>
        <p>Hello {{name}}!</p>
    </div>
    <script type="text/javascript" src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
</body>
</html>

  (1)ng-app指令标记当前元素将被Angular进行管理。

  (2)文本输入指令<input type="text" ng-model="name" />绑定到一个叫name的模型变量。

  (3)双大括号标记将name模型变量添加到问候语文本。

  运行该HTML页,可以发现,当我们在textbox中输入什么,问候语中都会及时进行绑定:

三、理解AngularJS中的指令

3.1 以前我们是这样写的

  假如我们有一个页面需要计算用户填写的数字*2的结果是多少,我们可能会有一个HTML界面和JavaScript代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Use JavaScript</title>
    <meta charset="utf-8" />
    <style type="text/css">
        #main
        {
            text-align:center;
        }
    </style>
</head>
<body>
    <div id="main">
        <input type="text" id="value" />
        <input type="button" value="*2" id="btn" />
    </div>
    <script type="text/javascript">
        (function(window) {
            // 利用querySelector找到界面上的按钮dom元素并增加事件监视器
            window.document.querySelector('#btn').addEventListener('click', function() {
                // 获取DOM元素
                var input = window.document.querySelector('#value');
                // 获取填写数值
                var value = input.value;
                // 执行业务操作
                value = value - 0;
                value = value * 2;
                // 设置显示结果
                input.value = value;
            });
        })(window);
    </script>
</body>
</html>

  运行结果如下图所示:

3.2 现在我们可以这样写

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<!-- ng-app与ng-controller不能位于同一级目录 -->
<html ng-app="myApp">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Use AngularJS</title>
    <meta charset="utf-8" />
    <style type="text/css">
        #main {
            text-align: center;
        }
    </style>
</head>
<body ng-controller="DemoController">
    <div id="main">
        <input type="text" id="value" ng-model="value" />
        <input type="button" value="*2" id="btn" ng-click="doCalc()" />
    </div>
    <script type="text/javascript" src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    <script type="text/javascript">
        (function (window) {
            // 1.模块
            var myApp = window.angular.module('myApp', []);
            // 2.控制器
            myApp.controller('DemoController', function ($scope) {
                $scope.value = 10;
                $scope.doCalc = function () {
                    $scope.value = $scope.value * 2;
                };
            });
        })(window);
    </script>
</body>
</html>

  (1)在AngularJS中,ng-app、ng-controller等都是指令,通过指令扩展HTML,通过表达式绑定数据到HTML。

  (2)网页加载完成后,angular.js这个脚本就会自动执行,执行过程主要是去界面上找到ng-app指令。

  (3)ng-app指令的作用在于声明当前DOM被AngularJS这个库中定义的一个模块所托管,而ng-model指令则用于绑定模型变量,ng-click绑定控制器中声明的事件。可以看出,controller中的逻辑是一个典型的闭包实现。

  (4)window.angular.module('myApp', []) 表示通过angular注册一个module模块,这个模块名是myApp,第二个参数传入这个模块所依赖的其他模块,没有需要其他模块的话就为空。

  (5)myApp.controller('DemoController', function ($scope) {}) 表示为myApp创建一个controller控制器,这个控制器名是DemoController,第二个参数传入这个控制器的控制逻辑。

  运行结果如下图所示,和之前的效果一样:

三、开发一个任务清单程序

3.1 需求说明

  假设我们要做一个任务清单程序,它可以记录我们要做的所有任务信息,并且我们可以随时标记任务为已完成,而且随时增加新的任务到任务列表中。在AngularJS的各种示例程序中,TodoMVC算是一个比较出名的项目,如下图所示:

  这里我们的目标就是仿照TodoMVC,借助AngularJS实现一个简易版的TodoList页面。

3.2 开发实现

  (1)借助Bootstrap实现界面,引入AngularJS绑定模型变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>任务列表 - By AngularJS</title>
    <meta charset="utf-8" />
    <link href="assets/css/bootstrap.min.css" rel="stylesheet" />
    <style type="text/css">
        body.container {
            max-width: 600px;
        }

        .checkbox {
            margin-bottom: 0px;
            margin-right: 20px;
        }

        .done {
            color: #ccc;
        }

            .done > .checkbox > label > span {
                text-decoration: line-through;
            }
    </style>
</head>
<body class="container" ng-app="TodoApp">
    <header>
        <h1 class="display-1">我的任务列表</h1>
        <hr />
    </header>
    <section ng-controller="MainController">
        <form class="input-group input-group-lg">
            <input type="text" class="form-control" ng-model="textValue" />
            <span class="input-group-btn">
                <button class="btn btn-secondary" ng-click="addTask()">添加</button>
            </span>
        </form>
        <ul class="list-group m-y-2">
            <li class="list-group-item" ng-repeat="item in todoList" ng-class="{'done':item.done}">
                <button type="button" class="close" aria-label="Close" ng-click="deleteTask(item)">
                    <span aria-hidden="true">&times;</span>
                    <span class="sr-only">Close</span>
                </button>
                <div class="checkbox">
                    <label>
                        <input type="checkbox" ng-model="item.done" />
                        <span>{{item.textValue}}</span>
                    </label>
                </div>
            </li>
        </ul>
        <p>总共<strong>{{todoList.length}}</strong>个任务,已完成<strong>{{updateDone()}}</strong></p>
    </section>
    <script type="text/javascript" src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>
    <script type="text/javascript" src="assets/js/app.js"></script>
</body>
</html>

  (2)完善app.js,在其中写入angular关键代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(function (window) {
    // 01.注册一个应用程序的主模块(module方法如果之传入一个参数就不是创建一个新模块)
    window.angular.module("TodoApp", []);
    //02.为主模块注册控制器(直接取得一个已存在的模块,不会存在全局污染)
    window.angular.module("TodoApp").controller("MainController", ["$scope", function ($scope) {
        // part01.定义属性
        $scope.textValue = "";  // 文本框中的值
        $scope.todoList = [
            { textValue: "学习AngularJS基础", done: false },
            { textValue: "学习BootStrap基础", done: false },
            { textValue: "学习ASP.Net MVC基础", done: false },
            { textValue: "学习ASP.Net WebApi基础", done: false }
        ]; // 任务列表,这里是写死的,实际中是通过AJAX拿到的
        // part02.定义行为
        // 增加任务行为
        $scope.addTask = function () {
            var textValue = $scope.textValue.trim();
            if (textValue) {
                // 加入任务列表
                $scope.todoList.push({
                    textValue: textValue,
                    done: false
                });
                // 清空文本框值
                $scope.textValue = "";
            }
        }
        // 删除任务行为
        $scope.deleteTask = function (task) {
            var index = $scope.todoList.indexOf(task);
            $scope.todoList.splice(index, 1); // 等价于remove方法
        }
        // 更新已完成任务数行为
        $scope.updateDone = function () {
            var temp = $scope.todoList.filter(function (item) {
                // 返回true表示当前item满足条件
                return item.done;
            });
            return temp.length;
        }
    }]);
})(window);

  可以看出,在控制器中属性和行为分开定义,职责分明。

  (3)运行TodoList页面,结果如下图所示:

 附件下载

AngularJSDemo

作者:周旭龙

出处:http://edisonchou.cnblogs.com

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-01-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【AngularJS】—— 5 表单
这部分,我们写一个表单程序,使用angularjs的检测并完成表单属性的获取与拷贝。   在AngularJS中,也支持html5中多种控件的自动检测,如:text、number、url、email、radio、checkbox等等。   可以通过anuglar.copy()自动拷贝form表单的数据。   代码参考如下: <!doctype html> <html ng-app> <head> <meta http-equiv="Content-Type" content=
用户1154259
2018/01/17
8780
【AngularJS】—— 5 表单
angularJS学习之路(五)---表达式
AngularJS 表达式把数据绑定到 HTML,这与 ng-bind 指令有异曲同工之妙。
wust小吴
2019/07/08
6410
【AngularJS】—— 3 我的第一个AngularJS小程序
通过前面两篇的学习,基本上对AngularJS的使用有了一定的了解。 本篇将会自己手动写一个小程序,巩固下理解。   首先要注意的是,引用AngularJS的资源文件angular.min.js文件。   由于这个框架是Google的工作人员开发的,因此国内访问的时候,会被墙导致无法下载资源文件。   因此,可以使用百度开源的静态链接:   http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js   代替原来的国外的资源文件链接:htt
用户1154259
2018/01/17
1.6K0
【AngularJS】—— 3 我的第一个AngularJS小程序
AngularJs之Scope作用域
  AngularJS 中,作用域是一个指向应用模型的对象,它是表达式的执行环境。作用域有层次结构,这个层次和相应的 DOM 几乎是一样的。作用域能监控表达式和传递事件。
用户5640963
2019/07/26
1.6K0
AngularJS API之bootstrap启动
对于一般的使用者来说,AngularJS的ng-app都是手动绑定到某个dom元素。但是在一些应用中,这样就显得很不方便了。 绑定初始化 通过绑定来进行angular的初始化,会把js代码侵入到html中,但是对于新手使用来说,还是足够了! <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="http://apps.bdimg.com/libs/
用户1154259
2018/01/17
7000
【AngularJS】—— 7 模块化
AngularJS有几大特性,比如:   1 MVC 2 模块化   3 指令系统   4 双向数据绑定 那么本篇就来看看AngularJS的模块化。   首先先说一下为什么要实现模块化:   1 增加了模块的可重用性   2 通过定义模块,实现加载顺序的自定义   3 在单元测试中,不必加载所有的内容   之前做的几个例子,控制器的代码直接写在script标签里面,这样声明的函数都是全局的,显然不是一个最好的选择。   下面看看如何进行模块化: <script type=
用户1154259
2018/01/17
5220
【AngularJS】—— 7 模块化
AngularJS 模块
你可以通过 AngularJS 的 angular.module 函数来创建模块:
陈不成i
2021/07/23
2.1K0
angularjs学习第一天笔记
    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点评与赐教。谢谢!
小小许
2018/08/30
2.3K0
angularjs学习第一天笔记
AngularJS Bootstrap
AngularJS 的首选样式表是 Twitter Bootstrap, Twitter Bootstrap 是目前最受欢迎的前端框架。
陈不成i
2021/07/26
4.8K0
Angularjs基础(六)
AngularJS HTML DOM     AngularJS为HTML DOM 元素的属性提供了绑定应用数据的指令。 ng-disabled指令     ng-disabled指令直接绑定应用数据到HTML的disabled属性。       实例:       <div ng-app="" ng-init="mySwitch=true">         <p>           <button ng-disableled="mySwitch">点我!</button
用户1197315
2018/01/19
3.1K0
[angularjs] angularjs系列笔记(一)简介
Andularjs 可以构建一个单一页面的应用程序(SPAS SinglePageApplications)
唯一Chat
2019/09/10
4810
【AngularJS】—— 2 初识AngularJs(续)
前一篇了解了AngularJS的一些简单的使用,这里继续跟着w3c学习一下剩下的内容。   本篇根据w3cschool.cc继续学习AngularJS剩余的内容,包括:   1 事件   2 模块   3 表单   4 数据验证   5 bootstrap CSS风格   6 include包含其他页面   7 应用程序   8 参考手册   首先看一下html的事件   关于html的事件,文中给出了三个例子,点击、隐藏、显示。使用方法基本相同:   先看一下点击的例子,点击按钮后,会触发ng-clic
用户1154259
2018/01/17
2.4K0
AngularJS快速入门
记得第一次听说AngularJS这项很赞的Web的前端技术,那时还是2014年,年中时我们我的一个大牛兄弟当时去面试时,被问到了是否熟悉该技术,当时他了解和使用的技术比较多。我们询问他面试情况时,他给俺这个菜菜科普了该技术,印象比较深的是该技术支持前端MVC架构,可以完成大部分原有的后台工作,当时就觉得很神奇,但由于自身技术基础比较薄弱,没有太多时间和积累去学习新的技术,因而搁置了。在2016新年初始,正好有一些富余时间,正好学习下这个被称为就是“”两个大括号“”的前端框架(当前已经非常成熟,国内大部分公司
用户1216676
2018/01/24
2.6K0
AngularJS快速入门
【AngularJS】—— 13 服务Service
在AngularJS中有很多的服务,常用的比如$http,$location等等。 本篇文章会介绍一下的内容:   1 $http这种Angular提供的服务的使用   2 如何自定义服务,并总结服务需要注意的几个小点。   $http的使用   AngularJS为我们提供了很多种服务,$http用于发送http请求,动态的请求数据。   这样就需要使用web容器来运行代码了,先看看程序源码,视图方面还是跟普通的代码相同: <div ng-controller="myAppCtrl">
用户1154259
2018/01/17
1.5K0
【AngularJS】—— 13 服务Service
Angularjs基础(八)
AngularJS Bootstrap     AngularJS 的首选样式表是 Twitter Bootstrap ,Twitter Bootstrap 是目前最受欢迎的前端框架 Bootstrap     你可以在你的 AngularJS 应用中加入 Twitter Bootstrap,你可以在你的 <head>元素中添加如下代码:     <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/boo
用户1197315
2018/01/19
3.1K0
AngularJS - 入门小Demo
如果了解了后端开发知识,想必对这些词汇不会陌生,AngularJS融合了后端开发的一些思想,虽然身为前端框架,但与jQuery框架却是完全不相同的东西。
雨临Lewis
2022/01/11
5.2K0
AngularJS 应用
<html> 元素是 AngularJS 应用: ng-app="myNoteApp" 的容器:
陈不成i
2021/07/26
1.2K0
前端框架AngularJS入门
AngularJS 诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、依赖注入等等。
一点博客
2019/07/24
2.6K0
【AngularJS】—— 12 独立作用域
前面通过视频学习了解了指令的概念,这里学习一下指令中的作用域的相关内容。 通过独立作用域的不同绑定,可以实现更具适应性的自定义标签。借由不同的绑定规则绑定属性,从而定义出符合更多应用场景的标签。 本篇将会总结下面的内容:   1 为何需要独立作用域   2 如何实现独立作用域   3 作用域的数据绑定 之前有一些错误,是由于replace拼写错误导致的。 拼写正确后,网友发现报错,无法正常工作。这是因为模板中存在单标签<br>,导致模板无法正确解析~ 再次感谢博友们提出的错误! 独立作
用户1154259
2018/01/17
1.4K0
【AngularJS】—— 12 独立作用域
Angularjs基础(三)
    AngularJS ng-model 指令     ng-model 指令用于绑定应用程序数据到HTML 控制器(input,select,textarea)的值 ng-model指令     ng-model指令可以将输入域的值与AngularJS 创建的变量绑定。       实例:         <div ng-app="myApp" ng-controller="myCtrl">             名字:<input ng-model="name">  
用户1197315
2018/01/19
3.2K0
相关推荐
【AngularJS】—— 5 表单
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验