AngularJS Day03

什么是指令
  • 指令directive是AngularJS的核心之一
  • 包括:
    Ø 用于扩展HTML元素、属性的指令
    Ø 执行特定功能的指令
    Ø 自定义指令
  • 内置指令基本上都是以ng-开头
  • 属性指令

ng-href:代替a标记的href属性
ng-src:代替img等标记的src属性
ng-disabled:设置表单元素是否可用
ng-checked:设置选项是否选中
ng-readonly:设置文本元素是否只读
ng-selected:设置下拉选项是否选中
ng-class:设置class属性
ng-style:设置style属性,应该是对象或JSON
ng-app:设置当前元素是AngularJS根元素
ng-controller:用于为应用添加控制器
ng-include:用于包含外部的HTML文件
ng-if:用于在表达式为false时移除HTML元素
ng-switch:根据表达式显示或隐藏对应的部分
ng-repeat:用于循环输出指定次数的HTML元素
ng-init:执行给定的表达式
ng-bind:使用给定的变量或表达式的值来替换HTML元素的内容
ng-bind-template:与上类似,可绑定多个
ng-cloak:用于在应用加载时防止代码未加载完而出现AngularJS表达式的问题
ng-model:用于绑定表单元素到作用域变量中(双向绑定)
ng-hide/ng-show:在表达式为true时隐藏/显示HTML元素
ng-form:增强HTML表单
ng-change:类似于onchange事件
ng-click:类似于onclick事件
ng-submit:类似于onsubmit事件

  • ng-app和ng-controller指令
  • ng-app为AngularJS创建$rootScope,任何具有ng-app属性的DOM元素被标记为$rootScope的起始点,通过run方法访问
  • ng-controller创建一个子作用域,避免所有数据都放在$rootScope中
  • 子作用域中的数据只有该控制器及其子控制器中可以访问,此时需注意数据修改的影响
  • ng-if指令
  • ng-if 指令用于在表达式为 false 时移除 HTML 元素。
  • 表达式为 true时会添加元素并显示。
  • ng-if 指令与ng-show、ng-hide不同,后者并不会移除元素,仅仅是显示和隐藏。
  • 注意:移除后再插入的是个克隆副本
    在这里插入图片描述
  • ng-switch指令
  • 对应的子元素使用ng-switch-when指令,如果匹配选中的则显示,其他未匹配的则移除。
  • ng-switch-default指令设置默认选项,如果都没有匹配的情况,默认选项会显示
  • 语法:
<div ng-switch="变量">
<div ng-switch-when="值1">…</div>
<div ng-switch-when="值2">…</div>
……
<div ng-switch-default>…</div>
</div>
  • ng-repeat指令
  • ng-repeat 指令用于循环遍历集合或对象,输出
    HTML元素。
  • 参数必须是集合或对象,语法:
    Ø <div ng-repeat=“变量 in 集合或对象”>{{变量}}</div>:
    变量就是集合中每一个数据,或对象的每个属性
    Ø <div ng-repeat=“(键变量,值变量) in 集合或对
    象”>…</div>:键变量是集合数据的索引下标或对象
    的属性名称,值变量是对应的数据或属性值
  • 遍历有重复数据的数组时,应使用“track by 唯
    一值”附加在集合后面
  • 在遍历中,可以通过$index、$first、$middle、
    $last、$even、$odd获取遍历状态
  • ng-options指令
  • 用于在select中生成option,语法:
    Ø 简单集合:k as v for (k,v) in arr
    Ø 复杂集合:e.id as e.name for e in collection
  • 注意
    Ø select一定要有ng-model,绑定当前选中的option值,将
    当前option的value值绑定到作用域中
    Ø 如果要添加自定义option,必须有value属性,但不能有
<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
	<meta charset="UTF-8">
	<title>内置指令:ng-option</title>
	<script src="angular/angular.min.js"></script>
	<script src="js/ng06.js"></script>
</head>
<body ng-controller="DirectiveController">

	<select ng-options="k as v for (k,v) in arr" ng-model="s1">
		<option value>请选择</option>
	</select>
	<h3>{{s1}}</h3>
	<hr>

	<select ng-options="u.id as u.name for u in users" ng-model="s2">
		<option value>请选择</option>
	</select>
	<h3>{{s2}}</h3>

</body>
</html>
  • ng-init和ng-bind指令
  • ng-init用于初始化作用域中的数据,如:
    <div ng-init=“age=30;name=‘mike’”>…</div>
  • ng-bind用于数据绑定,{{}}就是其简写形式,如:<p>{{a}}</p>等同于<p ng-bind=“a”></p>
  • ng-bind-template可一次绑定多个数据,但需注
    意语法,如:<p ng-bind-template=”{{a}}{{b}}"></p>
  • ng-bind和ng-cloak都可以解决FOUC(未渲染内
    容闪烁)问题,语法:<p ng-cloak>{{a}}</p>
  • form和ng-form指令
  • 支持表单元素验证(需禁用浏览器验证),支持
    表单嵌套,可动态生成表单
  • 表单输入元素的属性
    Ø $valid:内容合法,对应ng-valid类
    Ø $invalid:内容不合法,对应ng-invalid类
    Ø $pristine:没有填写记录,对应ng-pristine类
    Ø $dirty:有填写、编辑记录,对应ng-dirty类
    Ø $error:错误信息,常见的有required、email、url、
    number、minlength、maxlength、pattern等
  • ng-submit指令用于在表单提交时调用$scope中定
    义的方法;在没有设置action属性时并不真的提
  • 自定义指令
  • 使用directive方法可以自定义指令,语法:模块对象.directive(“指令名”,[注入内容,回调函数]);
  • 指令名采用骆驼命名法,使用时将驼峰名称改写为短横线连接的名称,如定义时为:itFirst,则使用时为it-first;第一个词不建议使用ng
  • 回调函数返回一个JSON对象,该对象包括了自定义指令的配置,即指令对象定义
  • 指令对象定义是一个JSON格式,包含大量指令配置项
  • 指令的生命周期
  • 加载阶段:以ng-app为入口,确定AngularJS的应用范围
  • 编译阶段:遍历应用范围,找到所有指令,根据指令的定义进行DOM转换(由template、templateUrl、replace等配置项决定),如果指令有compile函数则调用
  • 链接阶段:应用范围内的每条指令运行link函数,如果有DOM操作,也应该在link函数中执行
  • 指令配置项
  • restrict:字符串,指令以何种形式使用,‘A’表示属性Attribute, ‘E’表示元素Element、 ‘C’表示类Class、‘M’表示注释Comment(需加directive:),也可以是它们的组合形式。默认值为AE,可以通过元素名和属性名来调用指令。
  • template:一段HTML文本或返回一个HTML文本的函数,用来填充指令内容,当replace为true时结果必须有且仅有一个根元素。如果页面中多个指令的模板基本相同,可以使用$templateCache进行缓存后再使用
  • replace:布尔,是否替换原有元素,默认false
  • templateUrl:指定外部模板文件的路径,或返回路径的函数,用于代替template
  • transclude:是否包含原有内容,设置为true时,可在template中使用ng-transclude指令获取原有内容,即需要配合ng-transclude指令使用
  • priority:指定同一元素上多个指令的controller调用的优先级,数值类型,值越大优先级越高,默认为0
  • terminal:同一元素上优先级比本指令低的指令或低层次的指令是否执行,布尔类型
  • scope:表示指令的作用域,取值有三种(false、true、{}空对象)false表示继承父作用域,同一个作用域,默认值true表示从父作用域继承并创建一个新作用域;
    {}空对象表示隔离作用域,默认无法访问父作用域,但可以通过配置绑定(隔离)策略,将父作用域中指定数据绑定到隔离作用域中,绑定策略有三种形式:
    @:单向,父作用域影响隔离作用域,将属性作为字符串传递
    =:双向,父作用域与隔离作用域相互影响,将属性按原类型传递
    &:方法的访问形式,注意传参数的写法,必须以对象形式传递可以在以上符号的后面指定绑定的名称(属性名),也可省略简写
  • link:回调函数,用于处理数据、DOM,可以接受四个参数,分别是作用域scope、元素element、属性attribute、依赖的其它指令控制器controller;出于通用性考虑,scope提供$apply(“函数名()”)的形式调用函数,函数名可通过属性传递
  • controller:不同于之前的控制器,是指令自身的控制器,用于向外部公开指令所具有的方法
  • require:字符串,表示所依赖的其它指令名称,此时会将其它指令的控制器注入进link函数,作为第4个参数;指令名称前可以添加符号:^表示会在上层指令中查找,?表示找不到则传入null,可以组合成?^
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值