AngularJS - 入门小Demo
AngularJS四大特效
MVC模式、模块化设计、自动化双向数据绑定、依赖注入
如果了解了后端开发知识,想必对这些词汇不会陌生,AngularJS融合了后端开发的一些思想,虽然身为前端框架,但与jQuery框架却是完全不相同的东西。
AngularJS分为几个模块,需要使用哪个模块的功能,就直接引入对应的模块,这种模块化设计具备高内聚、低耦合的特点。
官方提供的模块有:ng、ngRoute、ngAnimate
用户也可以自定义模块:angular.module('模块名', [])
这里的ng是引擎engine的缩写,类似于Nginx的Ngin也是engine的缩写(谐音?)
Demo1 - 表达式
在当前目录下新建一个demo-1.html文件,并将angular.min.js文件放置在同一目录下。
<html>
<head>
<title>AngularJS入门小Demo-1 表达式</title>
<script src="angular.min.js"></script>
</head>
<body ng-app>
{{100+100}}
</body>
</html>
通过在html中引入angular.min.js
,并在body标签中加入ng-app
指令,则会对{{}}
里的表达式进行计算。双击打开这个html文件,会发现页面显示的是200,如果不加载ng-app指令,页面显示的则是{{100+100}}
。
Demo2 - 双向绑定
<html>
<head>
<title>AngularJS入门小Demo-2 双向绑定</title>
<script src="angular.min.js"></script>
</head>
<body ng-app>
请输入姓名:<input ng-model="name"><br>
请输入姓名:<input ng-model="name"><br>
{{name}}
</body>
</html>
通过ng-model
来绑定变量,双击上边的页面文件,在任意一个输入框中输入字符,都会影响到绑定同一变量的标签元素。比起用js或者jQuery来实现这个功能,AngularJS的写法要简单快捷很多。
Demo3 - 初始化指令
<html>
<head>
<title>AngularJS入门小Demo-3 初始化指令</title>
<script src="angular.min.js"></script>
</head>
<body ng-app ng-init="name='JOJO'">
请输入姓名:<input ng-model="name"><br>
{{name}}
</body>
</html>
通过ng-init
指令来对变量进行初始化,比如上边的html页面,在打开或刷新后,name变量的值会被初始化为JOJO。
Demo4 - 控制器
<html>
<head>
<title>AngularJS入门小Demo-4 控制器</title>
<script src="angular.min.js"></script>
<script>
//建立模块
//第一个参数是自定义的模块名,第二个参数是引用的模块名
var app = angular.module("myApp", []);
//创建控制器
app.controller("myController", function($scope){
$scope.add = function() {
return parseInt($scope.x) + parseInt($scope.y);
}
});
</script>
</head>
<body ng-app="myApp" ng-controller="myController">
第一个数:<input ng-model="x"><br>
第二个数:<input ng-model="y">
结果:{{add()}}
</body>
</html>
自定义一个模块,为模块创建一个控制器,控制器里可以定义一些逻辑来处理绑定的变量。这里的控制器也有个参数$scope,这个参数表示作用域,可以通过该作用域来获取操作变量,它就是视图层和控制层交互数据的桥梁。
更多和$scope相关的,可以了解下这篇文章关于AngularJS学习整理---浅谈$scope(作用域) 新手必备!。
Demo5 - 事件指令
<html>
<head>
<title>AngularJS入门小Demo-5 事件指令</title>
<script src="angular.min.js"></script>
<script>
//建立模块
//第一个参数是自定义的模块名,第二个参数是引用的模块名
var app = angular.module("myApp", []);
//创建控制器
app.controller("myController", function($scope){
$scope.add = function() {
return $scope.z = parseInt($scope.x) + parseInt($scope.y);
}
});
</script>
</head>
<body ng-app="myApp" ng-controller="myController">
第一个数:<input ng-model="x"><br>
第二个数:<input ng-model="y">
<button ng-click="add()">运算</button><br>
结果:{{z}}
</body>
</html>
ng-click
表示事件指令,类似于js里的绑定事件的用法。
Demo6 - 循环数组
<html>
<head>
<title>AngularJS入门小Demo-6 循环数组</title>
<script src="angular.min.js"></script>
<script>
//建立模块
//第一个参数是自定义的模块名,第二个参数是引用的模块名
var app = angular.module("myApp", []);
//创建控制器
app.controller("myController", function($scope){
$scope.list = [101, 252, 345, 836];
});
</script>
</head>
<body ng-app="myApp" ng-controller="myController">
<table>
<tr ng-repeat="x in list">
<td>{{x}}</td>
</tr>
</table>
</body>
</html>
使用ng-repeat
来循环数组,类似于foreach的遍历操作。
Demo7 - 循环对象数组(JSON)
<html>
<head>
<title>AngularJS入门小Demo-7 循环对象数组</title>
<script src="angular.min.js"></script>
<script>
//建立模块
//第一个参数是自定义的模块名,第二个参数是引用的模块名
var app = angular.module("myApp", []);
//创建控制器
app.controller("myController", function($scope){
$scope.list = [
{name:'张三', math:99, chinese:88},
{name:'李四', math:17, chinese:46},
{name:'赵五', math:60, chinese:60}
];
});
</script>
</head>
<body ng-app="myApp" ng-controller="myController">
<table>
<tr>
<td>姓名</td>
<td>学科</td>
<td>分数</td>
</tr>
<tr ng-repeat="entity in list">
<td>{{entity.name}}</td>
<td>{{entity.math}}</td>
<td>{{entity.chinese}}</td>
</tr>
</table>
</body>
</html>
实际应用中前后端一般通过JSON对象来交互,和上边的demo类似。
Demo8 - 内置服务$http
前端数据一般从后端获得,我们一般使用AngularJS的内置服务$http来获取后端数据,下边的demo需要在容器中运行(比如Tomcat)。
首先建立一个demo-8.html文件,将页面和angular.min.js
一起放置到web项目的webapp
目录下。
<html>
<head>
<title>AngularJS入门小Demo-8 内置服务$http</title>
<script src="angular.min.js"></script>
<script>
//建立模块
//第一个参数是自定义的模块名,第二个参数是引用的模块名
var app = angular.module("myApp", []);
//创建控制器
app.controller("myController", function($scope, $http){
$scope.findList = function() {
$http.get("data.json").success(
function(response) {
$scope.list = response;
}
);
}
});
</script>
</head>
<body ng-app="myApp" ng-controller="myController" ng-init="findList()">
<table>
<tr>
<td>姓名</td>
<td>学科</td>
<td>分数</td>
</tr>
<tr ng-repeat="entity in list">
<td>{{entity.name}}</td>
<td>{{entity.math}}</td>
<td>{{entity.chinese}}</td>
</tr>
</table>
</body>
</html>
接着在同一目录下,新建一个data.json
文件,内容如下:
[
{"name":"张三", "math":99, "chinese":88},
{"name":"李四", "math":17, "chinese":46},
{"name":"赵五", "math":60, "chinese":60}
]
需要注意的是,在.json
文件中的数据必须严格遵守JSON的规范,所有key必须使用双引号,value除了数值型以外的类型也必须使用双引号。在Demo7中由于是在js中书写的,所以可以不必遵守严格的JSON格式。另外可以看到,这个$http
的用法和AJAX很相似,其实其内部就是封装的AJAX。
本文最后附上所有demo源码,demo-8在里边的web项目里。可以通过mvn tomcat7:run
来启动该web项目(或者双击源码里的start.bat来启动项目),接着在浏览器地址栏输入localhost:8080/demo-8.html
,即可得到该JSON数据。
项目相关
AngularJS - 入门小Demo的更多相关文章
- angularJS入门小Demo【简单测试js代码的方法】
1.首先建立一个文件夹 demo, 2.在其中建立一个文本文档,改名为 demo-1.html, 3.把html中要引入的 js 文件拷贝到 demo目录下, 4.然后用 Notepadd++ 编辑刚 ...
- angularJS入门小Demo2 【包含不用数据库而用data.json格式响应前台的ajax请求方式测试】
事件绑定: <html> <head> <title>angularJS入门小demo-5 事件指令</title> <script src=&q ...
- FastDFS简单入门小demo
图片上传 需要引入 FastDFS 相关的jar包,但是这个jar没有在中央仓库,所以还得需要找到这个jar手动安装到自己的本地仓库才能使用. 需要一个配置文件 fdfs_client.conf ...
- gulp安装+一个超简单入门小demo
gulp安装參考.gulp安装參考2. 一.NPM npm是node.js的包管理工具.主要功能是管理.更新.搜索.公布node的包. Gulp是通过npm安装的. 所以首先,须要安装node.js. ...
- 1.Django入门小Demo
1.Django安装 (1)前提:已安装python环境 (2)打开命令行输入:pip install Django==2.1.3 (3)打开Pycharm,在File--Setting--Proje ...
- Spring Data Solr入门小Demo
package com.offcn.pojo; import java.io.Serializable; import java.math.BigDecimal; import java.util.D ...
- AngularJS入门Demo
1 :表达式 <html> <head> <title>入门小Demo-1</title> <script src="angular.m ...
- vue入门 0 小demo (挂载点、模板、实例)
vue入门 0 小demo (挂载点.模板) 用直接的引用vue.js 首先 讲几个基本的概念 1.挂载点即el:vue 实例化时 元素挂靠的地方. 2.模板 即template:vue 实例化时挂 ...
- 入门Leaflet之小Demo
入门Leaflet之小Demo 写在前面 ---- WebGIS开发基础之Leaflet GIS基本概念:GIS.Map.Layer.Feature.Geometry.Symbol.Data(Poin ...
随机推荐
- 稳定币GUSD的优劣势分析
在币圈,有人乘着牛市东风一夜暴富,也有人不幸赶上熊市倾家荡产,涨跌大起大落是币圈的常态,在如此不稳定的币市,投资者们都想寻求一些稳定.接着,稳定币诞生了. 2018年下半年,稳定币引起了各路投资者的高 ...
- zsh 的简单介绍
什么是 zsh,要想解释好这个问题,那么得先说明什么是 shell.不负责任的解释说法就是 shell 就是一个壳.这个壳可不是蜗牛的壳,而是计算机的一个壳,当然也不是计算机的外壳啦,这个壳是相对于计 ...
- php memcache知识点总结
$memcache = new Memcache; $memcache->connect('localhost',11211) or die('Could not connect'); //me ...
- LightOJ1236 —— 唯一分解定理 + 最小公倍数
题目链接:https://vjudge.net/problem/LightOJ-1236 1236 - Pairs Forming LCM PDF (English) Statistics Fo ...
- Codeforces Round #401 (Div. 2) D Cloud of Hashtags —— 字符串
题目链接:http://codeforces.com/contest/777/problem/D 题解: 题意:给出n行字符串,对其进行字典序剪辑.我自己的想法是正向剪辑的,即先对第一第二个字符串进行 ...
- Codeforces Round #371 (Div. 2) C. Sonya and Queries —— 二进制压缩
题目链接:http://codeforces.com/contest/714/problem/C C. Sonya and Queries time limit per test 1 second m ...
- Eclipse配置python环境
主要分为四步 1.安装java环境 2.在Eclipse下安装Pydev 1)启动 Eclipse,利用 Eclipse Update Manager 安装 PyDev.在 Eclipse 菜单栏中找 ...
- 编辑xml文件时不能自动提示问题的解决
在编辑xml文件时,eclipse总是不能自动提示,在网上找了一些资料,大部分都是说关于xml editor配置的,下面也把这个方法罗列在下面,以供参考: 解决办法:在eclipse的菜单里,找到wi ...
- legend2---开发日志12(vue如何进一步学习)
legend2---开发日志12(vue如何进一步学习) 一.总结 一句话总结:还是得找教程(比如视频),自己摸索太浪费时间,也容易踩坑和抓不住重点 还是得找教程(比如视频),自己摸索太浪费时间,也容 ...
- BZOJ_3680_吊打XXX_模拟退火
BZOJ_3680_吊打XXX_模拟退火 Description gty又虐了一场比赛,被虐的蒟蒻们决定吊打gty.gty见大势不好机智的分出了n个分身,但还是被人多势众的蒟蒻抓住了.蒟蒻们将 n个g ...