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. OpenGL:使用顶点数组法绘制正六面体

    在今天的opengl的课程以及实验中,我们学习了如何使用顶点数组的方法来绘制图形,但相信还有很多同学对它的实际使用方法不太了解,我们就用我们今天实验课上的实例来简单讲解一下 题目及要求 绘制一个正六面 ...

  2. [SHELL]输入输出重定向与管道

    一 . 输出重定向(将命令的输出重定向到文件): ls -al > test 以覆盖的方式写入 ls -al >> test 以追加的方式写入 二 . 输入重定向(将文件的内容重定向 ...

  3. 机器学习英雄访谈录之 DL 自由职业者:Tuatini Godard

    目录 机器学习英雄访谈录之 DL 自由职业者:Tuatini Godard 正文 对我的启发 机器学习英雄访谈录之 DL 自由职业者:Tuatini Godard Sanyam Bhutani 是 M ...

  4. PHP学习 文件访问和写入

    <?php $path = $_SERVER['PHP_SELF']; //PHP_SELF:当前执行脚本的文件名,与 document root 有关 echo basename($path) ...

  5. [Docker基础]如何清除不用的资源

    Docker - How to cleanup resources 有时你可能需要清理Docker中不用的资源,特别是在学习Docker过程中创建的镜像.容器.网络.存储卷等. delete volu ...

  6. Android 7.0+相机、相册、裁剪适配问题

    Android 7.0+相机.相册.裁剪适配问题 在manifest中: <provider android:name="android.support.v4.content.File ...

  7. 将ssh失败的用户放入hosts.deny中

    1.find / -name secure 找到linux系统安全日志文件 2.cp `find / -name secure` /tmp/`date +%F` 将secure文件复制出来 或者使用f ...

  8. [问题排查]记录一次两个dubbo提供者同时在线,代码不一致导致问题的排查记录

    1. 需求 有一个需求job定时5秒一次,job[消费者]调用dsc[提供者]提供的dubbo完成:先清空redis的某个key,然后再往redis中放入新的数据,这是一个定时任务,需要每隔5秒执行一 ...

  9. PAT 甲级 1030 Travel Plan

    https://pintia.cn/problem-sets/994805342720868352/problems/994805464397627392 A traveler's map gives ...

  10. PGSQL 数据库备份练习

    截图先 慢慢说 1. 简单使用方法 先用 之前的setx 命令设置环境变量. set path=%PATH% ---其实第一步没必要..... 跟人学的 setx PATH "%path%& ...