一、数据双向绑定

angular(下面统一简称ng)强大的地方莫过于它内置的数据双向绑定功能,下面我们通过一个简单的例子来演示ng强大的双向绑定数据的能力。

代码如下:

1、dom结构:

1.<!DOCTYPE html>
2.<html lang="en" ng-app="myApp">
3.<head>
4. <meta charset="UTF-8">
5. <title>Document</title>
6. <script src="js/angular.js"></script>
7.</head>
8.<body>
9. <form ng-controller="userInfoCtrl">
10. <input type="text" ng-model="userInfo.name">
11. {{userInfo.name}}
12. <p ng-bind="userInfo.age"></p>
13. </form>
14.
15.</body>
16.</html>

2、js代码:

1.var app = angular.module('myApp',[]);
2. app.controller('userInfoCtrl',function($scope){
3. $scope.userInfo = {
4. name: '张三',
5. age: '18'
6. }
7. })
8. app.controller('userInfoCtrl',['$scope',function($scope){
9. $scope.userInfo = {
10. name: '张三',
11. age: '19'
12. }
13. }])

上面的例子简单的实现了ng的双向绑定功能,那么到底是怎么实现的呢?

1、先加载angular.js文件;

2、在根节点html上(也可以是其他任何一个节点,在哪里添加,ng的边界就在哪里产生)添加ng-app指令,它会告诉浏览器,从这个地方开始,里面的内容都用ng去解析渲染;

3、给form添加ng-controller,这是添加控制器(也可以叫作用域)的指令,它的作用是创建一个隔离的$scope对象,什么是$scope?

提到$scope,还得先从$rootscope说起,$rootScope是ng中最接近全局作用域的对象。在$rootScope上附加太多业务逻并不是好主意,这与污染JavaScript的全局作用域是一样的。$scope对象就是一个普通的JavaScript对象,我们可以在其上随意修改或添加属性。

4、给input添加ng-model指令,值等于变量userInfo.name。ng-model就是实现ng数据双向绑定的指令。ng-model指令用来将input、 select、 textarea或自定义表单控件同包含它们的作用域中的属性进行绑定。(这是第一种绑定方法);

5、{{ }}语法是AngularJS内置的模板语法,它会在内部$scope和视图之间创建绑定。基于这个绑定,只要$scope发生变化,视图就会随之自动更新。(这是第二种绑定方法);

6、尽管可以在视图中使用{{ }}模板语法(ng内置的方式),我们也可以通过ng-bind
指令实现同样的行为。

接下来是Js代码部分的实现

7、ng允许我们使用angular.module()方法来声明模块,这个方法能够接受两个参数,第一个是模块的名称,第二个是依赖列表,也就是可以被注入到模块中的对象列表。接下来,就可以在angular.module(‘myApp’)返回的对象上创建我们的应用了。

8、通过ng-controller创建一个作用域,并对作用域中的$scope对象进行操作;

9、在userInfoCtrl这个作用域中,添加控制器逻辑处理的代码。

10、总结:在ng中,通过controller控制器连接了视图与逻辑层,任何一方发生变化都会引起另一方的变化,而实现这个功能的方法则可以通过:ng-model、{{ }}或者ng-bind。

二、常见的几种页面判断

1.ng-switch

ng-switch用来判断输入框的值和预定义的值是否匹配,如果匹配,则显示预定义的视图,反之则显示默认的视图。这个指令和ng-switch-when及on=”propertyName”一起使用,可以在propertyName发生变化时渲染不同指令到视图中。在下面的例子中,当person.name是Ari时,文本域下面的div会显示出来,并且这个人会获得胜利:

1.<input type="text" ng-model="person.name"/>
2.<div ng-switch on="person.name">
3. <p ng-switch-default>And the winner is</p>
4. <h1 ng-switch-when="Ari">{{ person.name }}</h1>
5.</div>
2.ng-if

使用ng-if指令可以完全根据表达式的值在DOM中生成或移除一个元素。如果赋值给ng-if的表达式的值是false,那对应的元素将会从DOM中移除,否则对应元素的一个克隆将被重新插入DOM中。

1.<div ng-if="2+2===5">
2. Won't see this DOM node, not even in the source code
3.</div>

因为2+2并不等于5,所以表达式为false,最后这个div会被移除。

3.ng-show、ng-hide

ng-show和ng-hide根据所给表达式的值来显示或隐藏HTML元素。当赋值给ng-show指令的
值为false时元素会被隐藏。类似地,当赋值给ng-hide指令的值为true时元素也会被隐藏。

1.<div ng-show="2 + 2 == 4">
2. 2 + 2 is 4, do show
3.</div>
4.<div ng-hide="2 + 2 == 5">
5. 2 + 2 isn't 5, don't hide
6.</div>

从结果上来看,ng-if和ng-show/ng-hide似乎效果差不多,但两者的最大区别在于,前者会移除dom结构,而后者不会移除dom结构,只是通过样式的display:none和display:block来控制。

 

angular入门学习文档之一的更多相关文章

  1. Apache Pig入门学习文档(一)

    1,Pig的安装    (一)软件要求    (二)下载Pig      (三)编译Pig 2,运行Pig    (一)Pig的所有执行模式    (二)pig的交互式模式    (三)使用pig脚本 ...

  2. 2013 最新的 play web framework 版本 1.2.3 框架学习文档整理

    Play framework框架学习文档 Play framework框架学习文档 1 一.什么是Playframework 3 二.playframework框架的优点 4 三.Play Frame ...

  3. Ext JS 6学习文档-第8章-主题和响应式设计

    Ext JS 6学习文档-第8章-主题和响应式设计 主题和响应式设计 本章重点在 ExtJS 应用的主题和响应式设计.主要有以下几点内容: SASS 介绍和入门 主题 响应式设计 SASS 介绍和入门 ...

  4. 全网首发,腾讯T3-3整理Netty学习方案(体系图+项目+学习文档)

    前言: 想要学好一门技术,最起码要对他有一定的了解,起码听说过相应的底层原理的东西吧,最起码你要有一点能和别人交流的内容吧,下面是我精简的一点内容,希望对于大家了解netty能有一点帮助 Netty是 ...

  5. Openstack api 学习文档 & restclient使用文档

    Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...

  6. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  7. .Net 官方学习文档

    .Net 官方学习文档:https://docs.microsoft.com/zh-cn/dotnet/articles/welcome

  8. soapUI学习文档(转载)

    soapUI 学习文档不是前言的前言记得一个搞开发的同事突然跑来叫能不能做个WebService 性能测试,当时我就凌乱了,不淡定啊,因为我是做测试的,以前连WebService 是什么不知道,毕竟咱 ...

  9. NodeJS-001-Nodejs学习文档整理(转-出自http://www.cnblogs.com/xucheng)

    Nodejs学习文档整理 http://www.cnblogs.com/xucheng/p/3988835.html 1.nodejs是什么: nodejs是一个是javascript能在后台运行的平 ...

随机推荐

  1. HBase数据访问的一些常用方式

    类型 特点 场合 优缺点分析 Native Java API 最常规和高效的访问方式 适合MapReduce作业并行批处理HBase表数据 Hbase Shell HBase的命令行工具,最简单的访问 ...

  2. 23-[模块]-logging

    1.日志级别 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志 ...

  3. 18 [网络编程]-UDP

    1.TCP VS UDP tcp基于链接通信 基于链接,则需要listen(backlog),指定连接池的大小 基于链接,必须先运行的服务端,然后客户端发起链接请求 对于mac系统:如果一端断开了链接 ...

  4. CF 700 E. Cool Slogans

    E. Cool Slogans 链接 题意: 给定一个字符串S,从中选出k个子串a[1],a[2]...a[k],满足a[i]在a[i+1]中出现了两次(可以重叠),求最大的k. 分析: 建出SAM, ...

  5. 最新版CocoaPods的安装和使用以及版本升级遇到的问题

    CocoaPods的下载及安装 mac系统已经默认安装好Ruby环境,如果你不确定自己系统中是否有Ruby的,可以在终端中输入命令行:ruby -v查看当前ruby版本.如图:  确定以后,接下来就可 ...

  6. $.ready和onload 区别

    1.jq ready()的方法就是Dom Ready 他的作用或者意义就是:在DOM加载完成后就可以可以对DOM进行操作. 一般情况先一个页面响应加载的顺序是,域名解析-加载html-加载js和css ...

  7. 使用scrapy框架的monkey出现monkeypatchwarning: monkey-patching ssl after ssl...的解决办法

    问题描述:  环境情况: pycharm 2016.1.4———-python 3.6.0——–windows10系统 在scrapy爬虫框架中, 使用协程gevent中的monkey时, 可能会出现 ...

  8. senlenium使用

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  9. myeclipse激活后server不能用问题

    一般是由于激活失败造成的,这种问题就卸了重新安装吧,目前还没有找到合理的方法解决,这个还真的看哥们的运气了,我是装了不下5遍才激活成功的,一般情况下,在激活的时候 出现下图的情况,Usercode写好 ...

  10. C++ chrono 库中的 steady_clock 和 system_clock

    C++11 中提供了一个计时的标准库 <chrono>; 里面有三种时钟 clock: steady_clock, system_clock 和 high_resolution_clock ...