前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >angularjs中常用的ng指令介绍【转载】

angularjs中常用的ng指令介绍【转载】

作者头像
用户3055976
发布于 2018-09-12 07:04:27
发布于 2018-09-12 07:04:27
2K00
代码可运行
举报
文章被收录于专栏:知道一点点知道一点点
运行总次数:0
代码可运行

原文:http://www.cnblogs.com/lvdabao/p/3379659.html

一、模板中可使用的东西及表达式

模板中可以使用的东西包括以下四种:

  1. 指令(directive)。ng提供的或者自定义的标签和属性,用来增强HTML表现力。
  2. 标记(markup)。即双大括号{{}},可将数据单向绑定到HTML中。
  3. 过滤器(filter)。用来格式化输出数据。
  4. 表单控制。用来增强表单的验证功能。

其中,指令无疑是使用量最大的,ng内置了很多指令用来控制模板,如ng-repeat,ng-class,也有很多指令来帮你完成业务逻辑,如ng-controller,ng-model。过滤器通常是伴随标记来使用的,将你model中的数据格式化为需要的格式。表单的控制功能主要涉及到数据验证以及表单控件的增强。

在这里有必要说明一下表达式的概念,毕竟我们模板中大部分使用的都是变量。ng中的表达式与javascript表达式类似但是不可以划等号,它是ng自己定义的一套模式。表达式可以作为指令的值,如ng-modle=”people.name”、ng-click=”showMe()”,看起来是如此像字符串,故而也叫字符串表达式。也可以在标记中使用表达式,如{{1+2}},或者与过滤器一起使用{{1+2 | currency}}。在框架内部,字符串不会简单的使用eval()来执行,而是有一个专门的$parse服务来处理。在ng表达式中不可以使用循环语句、判断语句,事实上在模板中使用复杂的表达式也是一个不推荐的做法,这样视图与逻辑就混杂在一起了。

二、样式相关的指令

既然模板就是普通的HTML,那我首要关心的就是样式的控制,元素的定位、字体、背景色等等如何可以灵活控制。下面来看看常用的样式控制指令。

1.  ng-class

ng-class用来给元素绑定类名,其表达式的返回值可以是以下三种:

1) 类名字符串,可以用空格分割多个类名,如’redtext boldtext’;

2) 类名数组,数组中的每一项都会层叠起来生效;

3) 一个名值对应的map,其键值为类名,值为boolean类型,当值为true时,该类会被加在元素上。

下面来看一个使用map的例子:

ng-class测试

 红色  加粗  删除线

map:{redtext:{{red}}, boldtext:{{bold}}, striketext:{{strike}}}

如果你想拼接一个类名出来,可以使用插值表达式,如:

<div class=”{{style}}text”>字体样式测试</div>

然后在controller中指定style的值:

注意我用了class而不是ng-class,这是不可以对换的,官方的文档也未做说明,姑且认为这是ng的语法规则吧。

与ng-class相近的,ng还提供了ng-class-odd、ng-class-even两个指令,用来配合ng-repeat分别在奇数列和偶数列使用对应的类。这个用来在表格中实现隔行换色再方便不过了。

2.  ng-style

ng-style用来绑定元素的css样式,其表达式的返回值为一个js对象,键为css样式名,值为该样式对应的合法取值。用法比较简单:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div ng-style="{color:'red'}">ng-style测试</div>

<div ng-style="style">ng-style测试</div>

$scope.style = {color:'red'};

3. ng-show,ng-hide

对于比较常用的元素显隐控制,ng也做了封装,ng-show和ng-hide的值为boolean类型的表达式,当值为true时,对应的show或hide生效。框架会用display:block和display:none来控制元素的显隐。

三、表单控件功能相关的

对于常用的表单控件功能,ng也做了封装,方便灵活控制。

ng-checked控制radio和checkbox的选中状态

ng-selected控制下拉框的选中状态

ng-disabled控制失效状态

ng-readonly控制只读状态

以上指令的取值均为boolean类型,当值为true时相关状态生效,道理比较简单就不多做解释。 注意:  上面的这些只是单向绑定,即只是从数据到模板,不能反作用于数据。要双向绑定,还是要使用  ng-model  。

四、事件绑定相关

事件绑定是javascrpt中比较重要的一部分内容,ng对此也做了详细的封装,正如我们之前使用过的ng-click一样,其他事件的指令如下:

事件绑定指令的取值为函数,并且需要加上括号,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<select ng-change=”change($event)></select>

然后在controller中定义如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$scope.change = function($event){
         alert($event.target);
         //……………………
}

在模板中可以用变量$event将事件对象传递到controller中。

对于ng的这种设计,一些人有所质疑,视图与事件绑定混在一起到底好不好?我们不是要讲究视图与逻辑分离吗?如此一来,把事件的绑定又变回了内联的,岂不是历史的倒退。我也一样对此表示不解,因为不写onclick已经很多年。。。但既然已经存在了,我们不妨往合理的方向上想一想,或许ng的设计者压根就不想让模板成为单纯的视图层,本来就是想增强HTML,让它有一点业务能力。这么想的话似乎也能想通,好吧,先欺骗一下自己吧~

五、特殊的ng-src和ng-href

在说明这两个指令的特殊之前,需要先了解一下ng的启动及执行过程,如下图:

1) 浏览器加载静态HTML文件并解析为DOM;

2) 浏览器加载angular.js文件;

3) angular监听 DOMContentLoaded  事件,监听到时开始启动;

4) angular寻找ng-app指令,确定作用范围;

5) 找到app中定义的Module使用$injector服务进行依赖注入;

6) 根据$injector服务创建$compile服务用于编译;

7) $compile服务编译DOM中的指令、过滤器等;

8) 使用ng-init指令,将作用域中的变量进行替换;

9) 最后生成了我们在最终视图。

可以看到,ng框架是在DOMcontent加载完毕后才开始发挥作用。假如我们模板中有一张图片如下:

<img src=”{{imgUrl}}” />

那么在页面开始加载到ng编译完成之前,页面上会一直显示一张错误的图片,因为路径{{imgUrl}}还未被替换,就像这样:

为了避免这种情况,我们使用ng-src指令,这样在路径被正确得到之前就不会显示找不到图片。同理,<a>标签的href属性也需要换成ng-href,这样页面上就不会先出现一个地址错误的链接。

顺着这个思路再多想一点,我们在模板中使用{{}}显示数据时,在ng编译完成之前页面上岂不是会显示出大括号及里面的表达式?确实是这样。为了避免这个,ng中有一个与{{}}等同的指令:ng-bind,同样用于单向绑定,在页面刚加载的时候就不会显示出对用户无用的数据了。尽管这样你可能不但没舒心反而更纠结了,{{}}那么好用易理解,还不能用了不成?好消息是我们依然可以使用。因为我编写的是单页面应用,页面只会在加载index.html的时候出这个问题,只需在index.html中的模板中换成ng-bind就行。其他的模板是我们动态加载的,就可以放心使用{{}}了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-11-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【AngularJS】—— 2 初识AngularJs(续)
前一篇了解了AngularJS的一些简单的使用,这里继续跟着w3c学习一下剩下的内容。   本篇根据w3cschool.cc继续学习AngularJS剩余的内容,包括:   1 事件   2 模块   3 表单   4 数据验证   5 bootstrap CSS风格   6 include包含其他页面   7 应用程序   8 参考手册   首先看一下html的事件   关于html的事件,文中给出了三个例子,点击、隐藏、显示。使用方法基本相同:   先看一下点击的例子,点击按钮后,会触发ng-clic
用户1154259
2018/01/17
2.2K0
详细介绍AngularJS中与HTML DOM交互的各种方法和技术
AngularJS是一个强大的JavaScript框架,用于构建Web应用程序。它提供了许多功能和工具,使开发人员能够轻松地处理HTML DOM(文档对象模型)。HTML DOM是基于HTML文档的树状结构,表示网页中的元素和属性。在本文中,我们将详细介绍AngularJS中与HTML DOM交互的各种方法和技术。
网络技术联盟站
2023/07/05
2780
angularjs学习第七天笔记(系统指令学习)
  您好,接着在昨天对简单指令学习了解以后,今天开始学习了解angularjs中的系统指令
小小许
2018/08/30
2.9K0
angularjs学习第七天笔记(系统指令学习)
angularJS学习之路(六)---指令
一个东西需要说明:根据HTML标准,布尔属性代表一个true或者false值,当这个属性出现的时候,这个属性的值就是true, 无论实际值是什么,如果未出现,这个属性的值就是false
wust小吴
2019/07/08
1.7K0
【笔记】AngularJs学习笔记[02]【实践回顾与知识点归纳】
上一篇中,我们介绍ng的数据绑定的方法,不知道你是否能给吸收。想了一下,为了在 ng 入门之前能够帮助大家打好基础,所以在这篇中我就用一个例子来解析 ng,并归纳一下 ng 的知识点。
前端修罗场
2023/10/07
2780
【笔记】AngularJs学习笔记[02]【实践回顾与知识点归纳】
【AngularJS】 # AngularJS入门
ng-app 指令定义一个 AngularJS 应用程序。 若不声明,将直接显示表达式。
全栈程序员站长
2022/09/15
23.3K0
【AngularJS】 # AngularJS入门
前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定
张果
2018/01/04
15.5K0
前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定
【Hybrid开发高级系列】AngularJS(一)——基础专题
  一向不喜欢追求刚刚新鲜出炉的事物的我,终于在node js出来一年后开始迈出脚步。
江中散人_Jun
2023/10/16
6170
【Hybrid开发高级系列】AngularJS(一)——基础专题
AngularJS快速入门
记得第一次听说AngularJS这项很赞的Web的前端技术,那时还是2014年,年中时我们我的一个大牛兄弟当时去面试时,被问到了是否熟悉该技术,当时他了解和使用的技术比较多。我们询问他面试情况时,他给俺这个菜菜科普了该技术,印象比较深的是该技术支持前端MVC架构,可以完成大部分原有的后台工作,当时就觉得很神奇,但由于自身技术基础比较薄弱,没有太多时间和积累去学习新的技术,因而搁置了。在2016新年初始,正好有一些富余时间,正好学习下这个被称为就是“”两个大括号“”的前端框架(当前已经非常成熟,国内大部分公司
用户1216676
2018/01/24
2.6K0
AngularJS快速入门
再谈angularJS数据绑定机制及背后原理—angularJS常见问题总结
ng-bind 单向数据绑定($scope -> view),用于数据显示,简写形式是 {{}}。
周陆军
2018/08/02
7.9K0
Angularjs基础(六)
AngularJS HTML DOM     AngularJS为HTML DOM 元素的属性提供了绑定应用数据的指令。 ng-disabled指令     ng-disabled指令直接绑定应用数据到HTML的disabled属性。       实例:       <div ng-app="" ng-init="mySwitch=true">         <p>           <button ng-disableled="mySwitch">点我!</button
用户1197315
2018/01/19
3K0
Angularjs基础(八)
AngularJS Bootstrap     AngularJS 的首选样式表是 Twitter Bootstrap ,Twitter Bootstrap 是目前最受欢迎的前端框架 Bootstrap     你可以在你的 AngularJS 应用中加入 Twitter Bootstrap,你可以在你的 <head>元素中添加如下代码:     <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/boo
用户1197315
2018/01/19
3K0
(4)Angular的开发
angular框架,库,是一款非常优秀的前端高级JS框架,有了这个框架就可以轻松构建SPA应用程序,通过指令宽展了HTML,通过表达式绑定数据到HTML。
达达前端
2019/07/22
3.1K0
AngularJS 简介
AngularJS 是一个 JavaScript 框架。它可通过 <script> 标签添加到 HTML 页面。
陈不成i
2021/07/23
1.2K0
【一起来烧脑】一步学会AngularJS系统
AngularJS是一个JavaScript框架 一个用JavaScript编写的库
达达前端
2019/07/18
5.6K0
【一起来烧脑】一步学会AngularJS系统
Angularjs基础(二)
AngularJS 表达式   AngularJS 表达式写在双大括号内:{{expression}}   AngularJS 表达式把数据绑定到HTML,这与ng-bind 指令有异曲同工之妙   AngularJS 将在表达式书写的位置输出数据。   AngularJS 表达式很像JavaScript表达式:他们可以包含文字,运算符和变量。     实例{{5+5}} 或者{{firstName + "" +lastName}} AngularJs 数字   AngularJS 数字就像J
用户1197315
2018/01/19
3.5K0
第215天:Angular---指令
在 AngularJS 中将前缀为 ng- 这种属性称之为指令,其作用就是为 DOM 元素调用方法、定义行为绑定数据等
半指温柔乐
2018/09/11
3.2K0
angular面试题及答案_angular面试
ngAfterContentInit:当把内容投影进组件之后调用,第一次调用ngDocheck()之后调用,只调用一次,只适用于组件
全栈程序员站长
2022/11/02
11.4K0
AngularJS 动画
AngularJS 使用动画需要引入 angular-animate.min.js 库。
陈不成i
2021/07/26
2.2K0
AngularJS 指令的定义、语法、用法
AngularJS 是一个流行的前端框架,它提供了许多强大的功能和特性,其中之一就是指令(Directives)。指令是 AngularJS 中的核心概念之一,它允许开发者通过自定义 HTML 标签、属性或类名的方式来扩展 HTML 语义并增强页面的交互性和可重用性。本文将详细介绍 AngularJS 指令的定义、语法、用法以及一些实用技巧。
网络技术联盟站
2023/07/05
3580
推荐阅读
相关推荐
【AngularJS】—— 2 初识AngularJs(续)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验