说说指令

不得不赞叹,指令是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. Winform生成安装程序时配置自启动

    1.右击安装编辑程序,在“视图”菜单中,选择“注册表”. 2.创建“键”:HKCU\Software\Microsoft\Windows\CurrentVersion\Run 3.右键Run,新建“字 ...

  2. WPF Layout 系统概述 MeasureOverride和ArrangeOverride

    说的非常的好:多参考!!! https://blog.csdn.net/nncrystal/article/details/47416339 https://www.cnblogs.com/dingl ...

  3. CopyOnWriteArraySet源码解析

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 注:在看这篇文章之前,如果对CopyOnWriteArrayList底层不清楚的话,建议先去看看CopyOn ...

  4. Android开发教程 - 使用Data Binding(二)集成与配置

    本系列目录 使用Data Binding(一)介绍 使用Data Binding(二)集成与配置 使用Data Binding(三)在Activity中的使用 使用Data Binding(四)在Fr ...

  5. 201621123018《Java程序设计》第10周学习报告

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1. 常用异常 1.1 自己以前编写的代码中经常出现什么异常.需要捕获吗(为 ...

  6. ADB 命令介绍

    Android adb shell am 命令介绍 am这个指令是 activity manager的缩写.这个命令可以启动Activity.打开或关闭进程.发送广播等操作. am命令格式如下 adb ...

  7. BZOJ 1011--[HNOI2008]遥远的行星(乱搞)

    1011: [HNOI2008]遥远的行星 Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 5684  Solved ...

  8. http://www.vaikan.com/docs/jquery.form.plugin/jquery.form.plugin.html#getting-started

    http://www.vaikan.com/docs/jquery.form.plugin/jquery.form.plugin.html#getting-started Jquery.Form 异步 ...

  9. javascript window对象属性和方法

    window对象 window对象表示一个浏览器窗口或一个框架.在客户端JavaScript中,window对象是全局对象,所有的表达式 都在当前的环境中计算.也就是说,要引用当前窗口根本不需要特殊的 ...

  10. 【xsy1281】 珠串 打表+乱搞or数位dp

    题目大意:你要找出一个有$k$个的本质不同的$n$位二进制数的集合,使得集合中最大的数最小,请输出这个数 本质不同定义:对于一个数$k$,$rev(k)$,$~k$,$rev(~k)$与$k$本质相同 ...