说说指令

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

内置的指令很多,至少40-50个吧。我们在学习的时候,有两种思路,一种是先作题,遇到不会的就去问;还有一种就是先把书都看了,然后再做题。这儿呢,我们就先介绍大概的类别,至于细节指令,我们线下自我修行吧。

1.必须要会的指令

(1)ng-app

一个页面仅能有第一个ng-app起作用,所以页面最好是将ng-app写到html根元素上,这样所有的元素就都归ng管啦。

(2)ng-controller

一个页面可以有多个ng-controller,有一个Controller,也就意味着多了一个隔离区域。一般来说,Controller负责通过服务进行CRUD操作,并将数据或结果绑定在Controller的$scope上。

(3)ng-model

我们在上一篇也见过这个指令,<input type=’textbox’ ng-model=’name’ />,此处的含义是:将Controller中$scope的name绑定到此元素上,如果此元素内容变化,则必然会修改$scope.name的值

(4){{}}和ng-bind

这俩指令功能类似,都是将Controller中$scope上的值(例如name)绑定到显示元素上的。

两者的区别是:如果使用{{}},页面在加载的瞬间,用户有可能会看到尚未绑定数据的源码状态,而ng-bind则不存在此问题。不过不必因此困扰,用哪个都可以,也就是那么一瞬间吗。

     hello,{{name}}
<hr>
hello,<span ng-bind='name'></span>

2.样式相关的指令

(1)ng-class

ng-class可以设置为{key:value}对象,当value为真时,key所对应的样式启作用。

<!DOCTYPE html>

<html ng-app="App">
<head>
<script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script>
<script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.isbk=false;
$scope.isft=false; }); </script>
<style type='text/css'>
.bkcolor
{
background-color:green;
} .ftcolor
{
color:red;
}
</style>
</head>
<body>
<div ng-controller ="ctrl">
<input type='checkbox' ng-model='isbk' />使用background
<input type='checkbox' ng-model='isft'/>使用frontcolor
<div ng-class='{bkcolor:isbk, ftcolor:isft}'>
测试
</div>
</div>
</body>
</html>

查看效果:

点击这里测试运行效果。

(2)ng-class-even,ng-class-odd

这两个指令和ng-class类似,不过特殊之处是需要配合ng-repeat使用,代码如下:

<!DOCTYPE html>

<html ng-app="App">
<head>
<script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script>
<script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.personList = [{
name:"张三",
age:30
},{
name:"李四",
age:40
},{
name:"王五",
age:50
}]; }); </script>
<style type='text/css'>
.oddcolor
{
background-color:green;
} .evencolor
{
background-color:red;
}
</style>
</head>
<body>
<div ng-controller ="ctrl">
<table>
<tr ng-repeat='person in personList' >
<td>{{$index}}</td>
<!--注意:此处为字符串-->
<td ng-class-odd="'oddcolor'" ng-class-even="'evencolor'">{{person.name}}</td>
<td ng-class-odd="'oddcolor'" ng-class-even="'evencolor'">{{person.age}}</td>
</tr>
</table>
</div>
</body>
</html>

显示效果:

点击这里查看效果。

(3)ng-style

只需给ng-style赋值给style的对象就ok,见代码:

<!DOCTYPE html>

<html ng-app="App">
<head>
<script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script>
<script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.style={color:'red'}; }); </script>
</head>
<body>
<div ng-controller ="ctrl">
<div ng-style='style'>
测试
</div>
</div>
</body>
</html>

效果:

点击这里查看效果。

(4)ng-show/ng-hide

这是两个常用的指令,对应的值为true或false。当为true的时候,对应的指令生效,对应的css是display: block和display:none。

<!DOCTYPE html>

<html ng-app="App">
<head>
<script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script>
<script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.isshow = false; }); </script>
</head>
<body>
<div ng-controller ="ctrl">
<input type="checkbox" ng-model="isshow"/>显示
<div ng-show="isshow">
显示的内容。
</div>
</div>
</body>
</html>

运行效果:

点击这里查看效果。

3.表单指令

既然是表单指令,自然是指input、select、form等指令,还包括一些表单元素的状态指令。下面这个例子介绍一个登陆窗口,当用户名或密码为空时进行提示,并登录按钮不可用。

这其中要用到input指令和form指令,我们需要参考AngularJS的API使用这些指令的属性,下面来看例子吧。

<!DOCTYPE html>

<html ng-app="App">
<head>
<link rel="stylesheet" type="text/css" href="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/bootstrap.css">
<script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script>
<script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.loginInfo = {
name: "",
pwd: ""
}; $scope.login = function () {
alert("登陆名:" + $scope.loginInfo.name + "\n登陆密码:" + $scope.loginInfo.pwd + "\n执行登陆验证!");
} });
</script>
</head>
<body style='padding-top:10px;'>
<div class='container' ng-controller="ctrl">
<!--form需有name属性-->
<form name='loginform' class="form-horizontal">
<div ng-class="{'form-group':true,'has-success':loginform.username.$valid,'has-error':!loginform.username.$valid}">
<label class='col-md-2 control-label'>登陆名:</label>
<div class='col-md-7'>
<!--input元素需有name属性,注意:name属性和ng-model绑定 -->
<!--此处使用了 required、minlength、maxlength属性 -->
<input type="text" class="form-control" name='username' ng-model='loginInfo.name' required ng-minlength="3" ng-maxlength="10">
</div>
<!--注意:此处使用的是form的name属性和input元素的name属性 -->
<label class='col-md-3 control-label'>
<span ng-show='loginform.username.$error.required'>
登陆名不能为空。
</span>
<span ng-show="loginform.username.$error.minlength">
登录名不能小于3个字符
</span>
<span ng-show="loginform.username.$error.maxlength">
登录名不能大于10个字符
</span>
</label>
</div>
<div ng-class="{'form-group':true,'has-success':loginform.userpwd.$valid,'has-error':!loginform.userpwd.$valid}">
<label class='col-md-2 control-label'>密码:</label>
<div class='col-md-7'>
<input type="password" class="form-control" name='userpwd' ng-model='loginInfo.pwd' required>
</div>
<label class='col-md-3 control-label' ng-show="loginform.userpwd.$error.required">
密码不能为空。
</label>
</div>
<div class="form-group">
<div class='col-md-offset-2 col-md-10'>
<!--注意:此处使用ng-submit和ng-disabled-->
<input type="submit" class='btn btn-primary' value="登录" ng-click="login();" ng-disabled="!loginform.$valid" />
<button class='btn btn-danger'>
取消
</button>
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
loginform.username.$valid = {{loginform.username.$valid}}
</div>
<div class="col-md-offset-2 col-md-10">
loginform.username.$error = {{loginform.username.$error}}
</div>
<div class="col-md-offset-2 col-md-10">
loginform.$valid = {{loginform.$valid}}
</div>
<div class="col-md-offset-2 col-md-10">
loginform.$error = {{loginform.$error}}
</div>
</div>
</form>
</div>
</body>
</html>

看看效果:

点击这里查看效果。表单指令较多,此处简单介绍一般常用指令,深入的和其他的让我们线下自己学习吧。

4.逻辑指令

(1)ng-repeat

ngRepeat指令为集合中的每项实例化一个模板。每个模板的实例拥有自己的域,使用循环变量指向当前集合项上,$index指向当前项的索引或键值。它有一些常用的属性:$index、$first、$middle、$last、$odd、$even。

<!DOCTYPE html>

<html ng-app="App">
<head>
<script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script>
<script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.personList = [{
name:"张三",
age:30
},{
name:"李四",
age:40
},{
name:"王五",
age:50
}]; });
</script> </head>
<body>
<div ng-controller ="ctrl">
<ul>
<li ng-repeat='person in personList'>
姓名:{{person.name}},年龄:<span ng-bind='person.age'></span>
</li>
</ul>
</div>
</body>
</html>

运行效果:

点击这里查看。

(2)ng-if

ngIf指令基于{表达式}来移除或重建DOM树的一部分。如果赋给 ngIf的表达式计算结果为假,元素会从DOM移除,其它情况会复制一份元素插入到DOM中。

查看效果:

点击这里查看效果。

乍一看,这效果和上面那个ng-show和ng-hide有点相似么。确实,从图片效果看,却是如此,但是ng-show和ng-hide只是将display属性设置为block或null,而ng-if则是将该dom元素移除或增加上的,具体看下图:

(3)ng-switch

ngSwitch指令用于根据域表达式在你的模板上按条件切换DOM结构。

查看代码:

<!DOCTYPE html>

<html ng-app="App">
<head>
<script type="text/javascript" src="http://sandbox.runjs.cn/uploads/rs/394/xjz9g1bv/angular.js"></script>
<script type="text/javascript"> var App = angular.module("App", []); App.controller("ctrl", function ($scope) { $scope.switchValue = 1;
}); </script>
</head>
<body>
<div ng-controller ="ctrl">
<input type='radio' value='1' ng-model='switchValue' />1
<input type='radio' value='2' ng-model='switchValue' />2
<input type='radio' value='3' ng-model='switchValue' />3
<input type='radio' value='4' ng-model='switchValue' />4
<div>
选择的值 {{switchValue}}
</div>
<div ng-switch="switchValue">
<div ng-switch-when='1'>
我的值是1
</div>
<div ng-switch-when='2'>
我的值是2
</div>
<div ng-switch-when='3'>
我的值是3
</div>
<div ng-switch-default>
我是default
</div>
</div>
</div>
</body>
</html>

查看效果:

在上图,我们也可以看到,随着选择值的不同,ng-switch也在不停的增删dom。点击这里查看效果。

5.事件指令

事件指令也是一个大家族呀,常用的有这些呀:ng-change、ng-dblclick、ng-mousedown、ng-mouseenter、ng-mouseleave、ng-mousemove、ng-mouseover、ng-mouseup、ng-submit啊。

不过只是对常用的事件做了封装,很好使用,上面的例子中用到了ng-click,小伙伴,你可get到了,这儿就不写例子啦。

小结

指令的内容真的非常多,非常多,这篇文章看到这儿,你应该已经大致了解了内置指令的应用,像开头说的,以后你用到哪个指令,就好好的学习哪个指令吧。

AngularJS学习笔记(四)内置指令的更多相关文章

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

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

  2. Vue(四) 内置指令

    现在介绍 Vue.js 中 更多的内置指令 基本指令 v-cloak v-cloak 不需要表达式,它会在 Vue 实例结束编译时从绑定的 HTML 元素上移除,经常和 CSS 的 display: ...

  3. angularJS1笔记-(8)-内置指令

    index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  4. python自动化测试学习笔记-4内置函数,处理json

    函数.全局变量 写代码时注意的几点事项: 1.一般写代码的时候尽量少用或不用全局变量,首先全局变量不安全,大家协作的情况下,代码公用容易被篡改,其次全局变量会一直占用系统内容. 2.函数里如果有多个r ...

  5. 学习笔记——Maven 内置变量

    Maven内置变量说明: ${basedir} 项目根目录(即pom.xml文件所在目录) ${project.build.directory} 构建目录,缺省为target目录 ${project. ...

  6. Python学习笔记-Day3-python内置函数

    python内置函数 1.abs    求绝对值 2.all 判断迭代器中的所有数据是否都为true 如果可迭代的数据的所有数据都为true或可迭代的数据为空,返回True.否则返回False 3.a ...

  7. 【学习】js学习笔记:内置顶层函数eval()的兼容用法

    今天学了一个内置顶层函数,eval();其作用是将字符串转换成javascript命令执行,但必须符合语法,否则会报错. 如果写成window.eval(),则其定义的变量会在全局生效. 但是,在IE ...

  8. java web 学习笔记 jsp内置对象

    jsp2 表达式语言的内置对象 使用方式${object.attributename} 或者${object["attributename"]} pageContext pageS ...

  9. Python学习笔记-常用内置函数

    输出:print() 功能:输出打印 语法:print(*objects, sep=' ', end='\n', file=sys.stdout) 参数:objects----复数,表示可以一次输出多 ...

  10. [Python学习笔记-001] 内置函数getattr()

    如果某个实例foo有多个方法, 当对foo的每一个方法我们都需要使用try ... except ...进行包装的时候,内置函数getattr()可以用来精简代码. 1. getattr()的用法 # ...

随机推荐

  1. 1.mybatis入门

    一:创建表 CREATE TABLE `country` ( `id` ) NOT NULL AUTO_INCREMENT, `countryname` varchar() DEFAULT NULL, ...

  2. cxGrid 怎样才能让不自动换行 WordWrap:=false

    cxGrid 怎样才能让不自动换行 WordWrap:=false 2014-12-26 02:04:03|  分类: delphi|举报|字号 订阅     下载LOFTER我的照片书  |     ...

  3. ASP.NET写的一个博客系统

    由于域名闲置,正好也有服务器空间,短期内开发了一个博客系统. 大家都来谈  http://www.djdlt.com 目前是开放注册,免费发布.(限于空间有限,图片还是尽量少传些) 网站架构: ASP ...

  4. MVC使用TempData将返回的string传到另一个控制器页面中显示!

    我需要把数据库中查询出的数据,传递到另一个控制器的页面去显示. https://blog.csdn.net/ma_jiang/article/details/8164212 看了上面这篇文章,反应过来 ...

  5. .net图表之ECharts随笔02-字符云

    后续每一类图表,若无特殊说明,都将建立在01的基础上,修改参数option,且参数均以json的格式 要形成如图所示的字符云,一般需要设置两个大参数——title和series 其中,title就是图 ...

  6. .net图表之ECharts随笔01-最简单的使用步骤

    找了几种绘制图表的办法,后面选定了ECharts.下载链接如下,好像不同的ECharts有不同的用法,要下对. https://gitee.com/Tuky/SomeWebFrame/tree/mas ...

  7. 微服务统一登陆认证怎么做?JWT ?

    无状态登录原理 1.1.什么是有状态? 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session. 例如登录:用户登 ...

  8. 在ubuntu中我们使用sudo apt-get install 或者dpkg -i *.deb安装软件时,常常提示“有未能满足的依赖关系“,解决方法

    很早之前在ubuntu安装软件时遇到的问题,今天打开ubuntu看到了,总结如下: 在ubuntu中我们使用sudo apt-get install 或者dpkg -i *.deb安装软件常常提示“有 ...

  9. flask_mail发送邮件(附源码)

    文章介绍如何用flask_mail发送QQ邮件,发送其它邮箱简单的更改相应配置即可 传送门:源代码 源代码地址:https://github.com/1417766861/flask_mail 首先展 ...

  10. dubbo源码阅读之SPI

    dubbo SPI SPI,全程Service Provider interface, java中的一种借口扩展机制,将借口的实现类注明在配置文件中,程序在运行时通过扫描这些配置文件从而获取全部的实现 ...