AngularJS基础知识

本文深入讲解AngularJS框架,包括其双向绑定机制、MVC模式设计、指令使用、表达式处理、模块与控制器的概念及实现方式。并通过实例演示如何创建模块、控制器,以及使用$scope对象进行数据绑定。

AngularJS

1. 前端框架AngularJS提供双向绑定机制,只要用指令将HTML元素与模型中的变量进行了绑定,然后用JS脚本修改被绑定变量的值,HTML元素的内容、CSS样式就都会随之发生改变。
2. AngularJS按照MVC(或MVVM)模式来设计前端应用,将前端应用严格划分为视图、控制器(或视图模型)、调度器三种组件,并提供了依赖注入来管理各组件之间的依赖关系。
3. 使用AngularJS可以不写任何JavaScript脚本,只要为原来的 HTML标签增加一些额外的属性(它们是AngularJS 的指令)即可。

理解AngularJS的基本设计

<!DOCTYPE html>
<html>
	<head>
		<meta  charset="UTF-8">
		<title></title>
		<--导入angularJS-->
		<script src="https://cdn.staticfile.org/angular.js/1.6.2/angular.min.js"></script> 

	</head>
	
	<body ng-app ng-init="a=0;b=0">
		商品价格:<input type="number" min="0" ng-model="a" /><p>
		商品数量:<input type="number" min="0" ng-model="b" /><p>
		总价:{{a*b}}
	</body>
	
</html>

在这里插入图片描述

在这里插入图片描述

项目Value
ng-app用于在某标签内设置AngularJS应用
ng-model用于执行"双向绑定"
ng-bind用于将表达式的值绑定到HTML元素的innerHTML
ng-init用于声明变量,该指令的属性值可声明一个或多个变量,多个变量直接用分号隔开即可
ng-controller用于定义某个模块包含的控制器
ng-click用于为html标签的单击事件指定事件处理函数名称(可自定义名称)
  1. 导入angularJS:
    在 script 标签里加上 src=“https://cdn.staticfile.org/angular.js/1.6.2/angular.min.js”
  2. 使用{{}}来输出表达式
  3. 所谓双向绑定指的是将HTML输入元素的值与AngularJS应用的某个变量进行绑定。
    完成"双向绑定"之后,当HTML输入元素的值发生改变时,AngularJS应用中绑定的变量的值也会随之改变;反过来,当程序修改AngularJS应用的变量的值时,HTML输入元素的值也会随之改变。

表达式

AngularJS表达式主要用于在HTML页面上生成输出,AngularJS表达式与普通JavaScript表达式类似,同样支持变量以及各种运算符。只要将AngularJS的表达式放在{{}}中即可。

简单表达式

AngularJS的简单表达式既可由直接量(包括数值、字符串、boolean值等),也可由变量组成。

直接量类型

一般来说,JavaScript可以处理的表达式,AngularJS都可以正常处理.

<body ng-app>
	{{4*8+10/2}}<p>
	{{'十几万'+'挖墙脚'}}<p>
	{{'sdsw'+4+8}}<p>
	{{'sasa'+(4+8)}}
</body>

在这里插入图片描述
AngularJS还提供了ng-bind指令,该指令用于将表达式的值绑定到HTML元素(如<span…/>、<div…/>、<p…/>等)的innerHTML,这样这些 HTML 元素也用于显示 AngularJS表达式的值

<body ng-app>
	<p ng-bind="8+8"></p>
	<p ng-bind="'得分'+8+8"></p>
	<p ng-bind="'defwe'+(8+8)"></p>
</body>

在这里插入图片描述

变量表达式

AngularJS表达式也可以处理变量,ng-init用于声明变量,该指令的属性值可声明一个或多个变量,多个变量直接用分号隔开即可

<body ng-app ng-init="a=0;b=0">
		商品价格:<input type="number" min="0" ng-model="a" /><p>
		商品数量:<input type="number" min="0" ng-model="b" /><p>
		总价:{{a*b}}
</body>

复合对象表达式

AngularJS 表达式也支持使用对象、数组等复合类型。

1.使用对象:
使用ng-init指令初始化了一个item对象,该对象包含price和number两个属性。

<div ng-app ng-init="item={price:50,number:2}">
		商品价格:<input type="number" min="0" ng-model="item.price" /><p>
		商品数量:<input type="number" min="0" ng-model="item.number" /><p>
		总价:{{item.price*item.number}}
	</div>

在这里插入图片描述

2.使用数组:

<div ng-app ng-init="users=[{name:'小狗',age:12},{name:'小猫',age:8},{name:'鸭子',age:20}]">
		{{users[0].name}}的年龄是{{users[0].age}}<p>
		{{users[1].name}}的年龄是{{users[1].age}}<p>
		{{users[2].name}}的年龄是{{users[2].age}}<p>
	</div>

在这里插入图片描述


模块与控制器

模块是AngularJS页面最重要的组成单元,每个模块相当于一个独立的AngularJS应用。模块是一系列服务(service、指令、控制器、过滤器和配置信息)的集合。控制器是模块的下一级程序单元,也表示AngularJS模块内的重要作用域。

模块的加载

AngularJS模块的加载:
➢ 匿名模块(就是没有为ng-app指定属性值或属性值为空字符串),此时AngularJS可以自动加载并创建AngularJS模块。
➢ 命名模块(为ng-app指定了属性值,该属性值就是该模块的名称),此时必须调用angular对象的module()方法来创建AngularJS模块。
创建命名模块需要调用angular对象的module()方法:
angular.module( name , [requests] , [configFn] );
1. 该方法的第一个参数指定要创建的模块名
2. 第二个参数是一个数组,指定创建该模块时需要依赖的模块
3. 第三个参数用于传入一个配置函数。
<body>
	<div ng-app="brrby">
		<input type="text" ng-model="a" /><p>
		{{a}}
	</div>
<script>
	//加载命名模块
	var app=angular.module("brrby",[]);
</body>
模块创建完成之后,可调用模块的如下两个方法为模块添加全局变量或常量
➢ value(name,value):添加全局变量
➢ constant(name,value):添加全局常量

使用value()方法或constant()方法添加的变量或常量可被本模块内的任意控制器访问。

控制器

一个模块可包含多个控制器,模块可调用controller()方法来注册控制器。
ng-controller用于定义某个模块包含的控制器

	<body>
		<div ng-app="app1" ng-controller="app1_ctrl">
			<input type="text" ng-model="name"/>
		</div>
		<script>
			var app1=angular.module("app1",[]);
			app1.value("name","小汉");
			app1.controller("app1_ctrl",function(name){
				alert(name);
			});
		</script>
	</body>

在这里插入图片描述


$scope对象

调用模块的controller()方法注册控制器时,传入的第二个参数是一个函数,在该函数中可声明一个$scope形参,该形参就表示了AngularJS控制器对应的作用域。

通过$scope作用域指定的属性,和HTML中ng-model对应的变量是双向绑定的,也可自动显示在与指定ng-bind绑定的HTML元素中。

	<body>
		<div ng-app="app1" ng-controller="app1_ctrl">
			<input type="text" ng-model="name"/>			
		</div>		
		<script>
			var app1=angular.module("app1",[]);
			app1.value("name","小汉");
			app1.controller("app1_ctrl",function($scope,name){
				$scope.name="撒旦";
				alert(name);
			});					
		</script>
	</body>		

在这里插入图片描述
点击alert确定后:
在这里插入图片描述
此外也可通过$scope为控制器作用域设置方法(相当于函数)
ng-click指令为html标签的单击事件指定事件处理函数名称

	<body >		
		<div ng-app="brrby" ng-controller="brrby-ctrl">
			<button ng-click="cli()">点击我计数</button>
			单击了{{count}}次
		</div>
		<script>
			//根据名称来创建模块(创建命名模块)
			var app=angular.module("brrby",[]);
			app.controller("brrby-ctrl",function($scope){
				$scope.count=0;
				//设置按钮的自定义点击的函数cli
				$scope.cli=function(){
					$scope.count++;
				}
			});			
		</script>
	</body>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

不管使用AngularJS的指令"双向绑定"变量,还是使用表达式输出AngularJS变量,
还是使用AngularJS指令绑定事件处理函数,这些变量、函数都应该是$scope作用域内的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Brrby

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值