AngularJS提供了一系列内置指令。其中一些指令重载了原生的HTML元素,比如<form><a>标签,

当在HTML中使用标签时,并不一定能明确看出是否在使用指令。

其他内置指令通常以ng为前缀,很容易识别。例如后面将介绍的ng-href指令,它会提供一个超链接

,这个链接将处于禁用状态,直到ng-href="someExpresiion"中的表达式被调用并且返回一个值。

最后,某些内置指令并不会有对应的HTML标签,比如ng-controller,这个指令可以在标签的属性中使用,通常在包含很多子

元素并且需要共享作用域时使用

  • 注意,所有以ng前缀开头作为命名空间的指令都是AngularJS提供的内置指令,因此不要把你自己开发的指令以这个前缀命名。

基础ng属性指令

首先来看看和原生HTML标签名称相似的一组内置指令,这组指令非常容易记忆,因为仅仅是在

原生标签前加上了ng前缀

  • ng-href;
  • ng-src;
  • ng-disabled;
  • ng-checked;
  • ng-readonly;
  • ng-selected;
  • ng-class;
  • ng-style;

布尔属性

根据THML标准的定义,布尔属性代表一个true或false值,当这个属性出现时,这个属性的值就是true (无论实际定义的值是什么)

如果未出现,这个属性的值就是false;

当在AngularJS中使用动态数据绑定时,不能简单地将这个属性值设置为true或false,因为根据标准定义只有当这个属相不出现时,

它的值才为false。因此AngularJS提供带有ng-前缀版本的布尔属性,通过运算表达式的值来决定在目标元素上是插入还是移除对应的属性。

ng-disabled

使用ng-disabled可以把disabled属性绑定到以下表单输入字段上:

  • <input> (text, checkbox, radio, number, url, email, submit);
  • <trextarea>;
  • <select>;
  • <button>;

当写普通的HTML输入字段时,如果在元素标签上出现了disabled属性就会禁用这个输入字段。通过ng-disabled可以对是否出现属性进行绑定。

例如,在下面例子中按钮会一直禁用,直到用户在文本字段中输入内容:

<input type="text" ng-model="someProperty" placeholder="TypetoEnable">
<button ng-model="button" ng-disabled="!someProperty">AButton</button>

在下面的例子,文本字段会被禁用五秒,直到在$timeout中将idDisabled属性设置为true:

<textarea ng-disabled="isDisabled">Wait5seconds</textarea>
angular.module('myApp', [])
.run(function($rootScope, $timeout) {
$rootScope.isDisabled = true;
$timeout(function() {
$rootScope.isDisabled = false;
}, 5000);
});

ng-readoldy

同其它布尔属性一样,HTML定义只会检查readonly属性是否出现,而不是它的实际值。

通过ng-readonly可以将某个返回真或假的表达式是否出现readonly属性经行绑定:

Type here to make sibling readonly:
<input type="text" ng-model="someProperty"><br/>
<input type="text"
ng-readonly="someProperty"
value="Some text here"/>

ng-checked

标准的checked属性是一个布尔属性,不需要进行赋值。通过ng-checked将某个表达式同是否出现checked属性进行绑定。

我们通过ng-init指令将someProperty的值设置为true。将some Property同ng-checked绑定在一起,AngularJS会输出标准的HTML checked属性,

这样默认会把复选框勾选:

<label>someProperty = {{someProperty}}</label>
<input type="checkbox"
ng-checked="someProperty"
ng-init="someProperty = true"
ng-model="someProperty">

下面的这个这好相反

<label>someProperty = {{anotherProperty}}</label>
<input type="checkbox"
ng-checked="anotherProperty"
ng-init="anotherProperty = false"
ng-model="anotherProperty">

ng-selected

ng-selected可以对是否出现option标签的selected属性进行绑定:

<label>Select Two Fish:</label>
<input type="checkbox"
ng-model="isTwoFish"><br/>
<select>
<option>One Fish</option>
<option ng-selected="isTwoFish">Two Fish</option>
</select>

布尔值属性

ng-href, ng-src等属性虽然不是标准的HTML布尔属性,但是由于行为相似,所以在AngularJS源码内部是和布尔属性相等对待的。

ng-href 和 ng-src都能有效帮助重构和避免错误,因此在改进代码时强烈建议用它们代替原来的href和src属性。

  • ng-href

当使用当前作用域中的属性动态创建URL时,应该用ng-href代替href;

这里潜在的问题是当用户点击一个由插值动态生成链接时,如果插值尚未生效,将会跳转到错误的页面(通常是404).

这时,如果使用ng-href,AngularJS会等到插值生效(在例子中是两秒以后)后在执行点击链接的行为:

<!-- 当 href 包含一个 {{expression}}时总是使用
ng-href -->
<a ng-href="{{ myHref }}">I'm feeling lucky, when I load</a> <!-- 用户单击之前,href不会加载 -->
<a href="{{ myHref }}">I'm feeling 404</a>

将插值生效的事件延迟两秒,来观察实际的行为:

angular.module('myApp', [])
.run(function($rootScope, $timeout) {
$timeout(function() {
$rootScope.myHref = 'http://google.com';
}, 2000);
});

AngularJs -- 内置指令的更多相关文章

  1. AngularJS内置指令

    指令,我将其理解为AngularJS操作HTML element的一种途径. 由于学习AngularJS的第一步就是写内置指令ng-app以指出该节点是应用的根节点,所以指令早已不陌生. 这篇日志简单 ...

  2. angularJS内置指令一览

    基础ng指令 ng-href ng-src ng-disabled ng-readonly ng-checked ng-selected ng-class ng-style ng-show ng-hi ...

  3. angularjs内置指令 - form

    form类 angular js对form表单进行了那些扩展 ①html原生form表单不允许嵌套,而angular封装之后的form可以进行嵌套 ②angular为form扩展了自动校验,和防止重复 ...

  4. angularJs内置指令63个

  5. Angular内置指令

    记录一下工作中使用到的一些AngularJS内置指令 内置指令:所有的内置指令的前缀都为ng,不建议自定义指令使用该前缀,以免冲突 1. ng-model 使用ng-model实现双向绑定,通过表单的 ...

  6. AngularJS高级程序设计读书笔记 -- 指令篇 之 内置指令

    1. 内置指令(10-12 章) AngularJS 内置超过 50 个内置指令, 包括 数据绑定,表单验证,模板生成,时间处理 和 HTML 操作. 指令暴露了 AngularJS 的核心功能, 如 ...

  7. AngularJS学习笔记(四)内置指令

    说说指令 不得不赞叹,指令是ng最为强大的功能之一,好吧,也可以去掉之一,是最强大的功能.ng内置了许多自定义的指令,这避免了我们自己去造轮子.同时,ng也提供了自定义指令的功能,可以让我们的页面元素 ...

  8. 浅谈Angularjs至Angular2后内置指令的变化

    一.科普概要说明 我们常说的 Angular 1 是指 AngularJS: 从Angular 2 开始已经改名了.不再带有JS,只是单纯的 Angular: Angular 1.x 是基于JavaS ...

  9. angular指令(二)--内置指令

    一.基础ng 属性指令:  ng-href ng-src ng-disabled ng-checked ng-readonly ng-selected ng-class ng-styl ...

随机推荐

  1. VRP基础及操作

    VRP基础及操作 前言 通用路由平台VRP(Versatile Routing Platform)是华为公司数据通信产品的通用操作系统平台,它以IP业务为核心,采用组件化的体系结构,在实现丰富功能特性 ...

  2. Notes of Daily Scrum Meeting(12.16)

    最近好几门课的大作业都到了要截止的时候了,好多天队员们都抽不出来时间做软工的项目了,这样确实 和我们的计划出入很大,不过希望老师谅解,三门课程设计确实压力很大. 今天的团队任务总结如下: 团队成员 今 ...

  3. Redis学习笔记之Redis的对象

    类型与编码: typedef struct redisObject {                unsigned type:4://类型               unsigned encod ...

  4. 《Linux内核设计与实现》第一、二章学习笔记

    <Linux内核设计与实现>第一.二章学习笔记 姓名:王玮怡  学号:20135116 第一章 Linux内核简介 一.关于Unix ——一个支持抢占式多任务.多线程.虚拟内存.换页.动态 ...

  5. Uploadify提示-Failed,上传不了文件,跟踪onUploadError事件,errorMsg:2156 SecurityError Error #2156 null

    在使用Uploadify上传文件时,提示-Failed,上传不了文件 折腾中.....,没有结果.....%>_<%... 于是跟踪onUploadError事件,发现 errorMsg: ...

  6. VMware虚拟机安装ghost win7系统方法

    原本地址:http://www.xitongcheng.com/jiaocheng/xtazjc_article_15314.html

  7. php常用几种设计模式的应用场景

    1.单例设计模式 所谓单例模式,即在应用程序中最多只有该类的一个实例存在,一旦创建,就会一直存在于内存中! 单例设计模式常应用于数据库类设计,采用单例模式,只连接一次数据库,防止打开多个数据库连接. ...

  8. 选择提供器 - 选择监听器(selection provider-selection listener)模式

             

  9. BZOJ4066 简单题(KD-Tree)

    板子题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...

  10. LOJ2542 PKUWC2018随机游走(概率期望+容斥原理)

    如果直接dp,状态里肯定要带上已走过的点的集合,感觉上不太好做. 考虑一种对期望的minmax容斥:其中Max(S)为遍历完S集合的期望步数,Min(S)为遍历到S集合中一个点的期望步数.当然才不管怎 ...