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. Linux使用expect实现免手动密码输入,linux免密码登陆

    使用expect实现自动登录的脚本,网上有很多,可是都没有一个明白的说明,初学者一般都是照抄.收藏.可是为什么要这么写却不知其然.本文用一个最短的例子说明脚本的原理.  脚本代码如下:  ###### ...

  2. Python数据信号处理库RadioDSP: 引入ThinkDSP实现思想

    RadioDSP是针对无线通信领域的数字信号处理库,它采用了ThinkDSP的思想,对于无线通信中的IQ信号可以绘制频谱图和时域图.目前项目还在起始阶段,详细的代码可以参考链接: https://gi ...

  3. FUNMVP:几张图看懂区块链技术到底是什么?(转载)

    几张图看懂区块链技术到底是什么? 本文转载自:http://www.cnblogs.com/behindman/p/8873191.html “区块链”的概念可以说是异常火爆,好像互联网金融峰会上没人 ...

  4. Android webview背景设置为透明无效 拖动时背景闪烁黑色

    Adndroid 2.X的设置 webview是一个使用方便.功能强大的控件,但由于webview的背景颜色默认是白色,在一些场合下会显得很突兀(比如背景是黑色). 此时就想到了要把webview的背 ...

  5. jqgrid查找

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...

  6. Linux上部署Tomcat+Nginx (JavaWeb项目)

    https://blog.csdn.net/wohiusdashi/article/details/81147059

  7. 中间件——dubbo

    DUBBO初探-搭建DUBBO开发环境 2016年10月13日 12:27:49 NeroJings 阅读数:1697 标签: dubbo 更多 个人分类: dubbo   我所理解的DUBBO 相对 ...

  8. [转帖] k8s kubectl 命令行技巧

    https://jimmysong.io/posts/kubectl-cheatsheet/ Kubectl Cheatsheet kubectl命令技巧大全Posted on November 3, ...

  9. [转帖] CentOS 添加新的CA证书到认证地方

    Install the ca-certificates package: yum install ca-certificates Enable the dynamic CA configuration ...

  10. TP5 关联模型使用(嵌套关联、动态排序以及隐藏字段)

    在数据库设计中,常常会有如下这种关联模型,分类表中一条分类对应多个商品表中的商品 如果要获得分类表中每条分类 以及 对应的商品的信息,则需要先查询分类表中的数据,然后根据结果遍历查询商品表,最后把数据 ...