angularjs探秘<四> 双向数据绑定
双向数据绑定是angularjs的一大特性,这个特性在实际开发中省了不少事儿。之前第二篇提过数据绑定,这一篇从实际开发的案例中具体看下双向数据绑定的便捷。
首先看一个场景:

在 注册/登录 中经常遇到这样的场景,来看看angular的解决方案。
HTML:
<fieldset ng-controller="defaultInfo">
<legend>用户登录</legend>
<div class="box_a">
<label for="uName">用户名:</label>
<input class="text_a" id="uName" type="text" ng-model="uName">
<button ng-click="default_uName()">默认值</button>
</div>
<div class="box_a">
<label for="uPassword">密 码:</label>
<input class="text_a" id="uPassword" type="password" ng-model="uPassword">
<button ng-click="default_uPassword()">默认值</button>
</div>
<div class="box_a">
<input id="uTrue" type="checkbox" ng-model="uTrue">
<label for="uTrue">记住我</label>
<button ng-click="default_uTrue()">默认值</button>
</div>
</fieldset>
JS:
// defaultInfo控制器
MyApp.controller('defaultInfo',['$scope',function($scope){
$scope.uName = "";
$scope.uPassword = "";
$scope.uTrue = false;
// --
$scope.default_uName = function(){
$scope.uName = "miragefirefox@163.com";
}
$scope.default_uPassword = function(){
$scope.uPassword = "miragefirefox";
}
$scope.default_uTrue = function(){
$scope.uTrue = true;
}
}]);
ng-model 绑定标签与控制器的变量相对应,ng-click 挂载控制器点击事件,在控制器对应函数中给 model 重新赋值即可。
controller的数据通过事件绑定到model上,同样,controller也能读取到model上的数据(这里就不做演示了)。
有了双向数据绑定省去了过去反复读取DOM的繁琐过程,大大提高开发效率。
======================================================================================================================================
再来看一个动态修改样式的案例:

HTML:
<!--html-->
<div ng-controller="bgColor" class="box_b" ng-class="{ngRed:bgRed ,ngBlue:bgBlue }">
<button ng-click="changeBg('r')">红色</button>
<button ng-click="changeBg('b')">蓝色</button>
</div>
<!--css-->
.ngRed{ background:red; }
.ngBlue{ background:blue; }
JS:
// bgColor控制器
MyApp.controller('bgColor',['$scope',function($scope){
$scope.bgRed = false;
$scope.bgBlue = false;
$scope.changeBg = function(color){
switch(color){
case 'r':
$scope.bgRed = true;
$scope.bgBlue = false;
break;
case 'b':
$scope.bgRed = false;
$scope.bgBlue = true;
break;
}
}
}]);
通过 ng-class 动态改变div背景色,ng-class 支持表达式赋值class样式;
{ngRed:bgRed ,ngBlue:bgBlue } bgRed值为true时使用ngRed样式,bgBlue值为true时则使用ngBlue样式,以此类推ng-class可以写很多样式。
controller 这块儿非常简单了根据传参切换 true/false 值即可。
======================================================================================================================================
菜单的显示/隐藏案例:

HTML:
<div ng-controller="toggleM">
<h1 ng-click="upDown()">菜单标题</h1>
<ul ng-show="onOff">
<li>目录一</li>
<li>目录二</li>
<li>目录三</li>
<li>目录四</li>
<li>目录五</li>
</ul>
</div>
JS:
// toggleM控制器
MyApp.controller('toggleM',['$scope',function($scope){
$scope.onOff = false;
$scope.upDown = function(){
$scope.onOff = !$scope.onOff;
}
}])
ng-show 和 ng-hide 是angular专门为元素的显示/隐藏定制的指令,非常便捷。ng-show 为 true 时元素显示,false时元素隐藏;ng-hide则相反。在controller中改变ng-show的值即可实现元素的显示/隐藏。
以上三个实际开发中常见的场景用angular的双向数据绑定实现起来比传统方式高效便捷多了。
angularjs探秘<四> 双向数据绑定的更多相关文章
- AngularJs 特性 之 双向数据绑定
<!DOCTYPE html> <html lang="en" ng-app> <head> <meta charset="UT ...
- Angularjs1.X进阶笔记(1)—两种不同的双向数据绑定
一. html与Controller中的双向数据绑定 html-Controller的双向数据绑定,在开发中非常常见,也是Angularjs1.x的宣传点之一,使用中并没有太多问题. 1.1数据从ht ...
- 《AngularJS权威教程》中关于指令双向数据绑定的理解
在<AngularJS权威教程>中,自定义指令和DOM双向数据绑定有一个在线demo,网址:http://jsbin.com/IteNita/1/edit?html,js,output,具 ...
- AngularJS入门心得2——何为双向数据绑定
前言:谁说Test工作比较轻松,最近在熟悉几个case,差点没疯.最近又是断断续续的看我的AngularJS,总觉得自己还是没有入门,可能是自己欠前端的东西太多了,看不了几行代码就有几个常用函数不熟悉 ...
- angularJs:双向数据绑定
示例1 <!DOCTYPE html> <html ng-app> <head> <meta charset="UTF-8" /> ...
- Vue、AngularJS 双向数据绑定解剖
数据与视图的绑定与同步,最终体现在对数据的读写处理过程中,也就是 Object.defineProperty() 定义的数据 set.get 函数中.Vue 中对于的函数为 defineReactiv ...
- AngularJS双向数据绑定
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- AngularJS之双向数据绑定,class绑定
之前一直都是用vue来完成一些日常开发,初入AngularJS,记录一些日常开发遇到的问题. 1.双向数据绑定 AngularJS与vue的区别在于,vue采用的是虚拟DOM,模板文件上绑定的一大堆指 ...
- angularJs初体验,实现双向数据绑定!使用体会:比较爽
使用初体验:ng 双向数据绑定: 最简单的双向数据绑定:(使用默认模块控制) <body ng-app> <input type="text" ng-model= ...
随机推荐
- split与re.split/捕获分组和非捕获分组/startswith和endswith和fnmatch/finditer 笔记
split()对字符串进行划分: >>> a = 'a b c d' >>> a.split(' ') ['a', 'b', 'c', 'd'] 复杂一些可以使用r ...
- c++ 函数中的部分代码执行一次
编程时有时需要将一段代码中的某一块只执行一次: #include<iostream> using namespace std; int fun1(int a) { static bool ...
- FFMPEG Qt视频播放器
本文是根据PaintEvent事件处理函数不停在组件中绘制视频帧数据 做过图像界面开发的都知道,任何耗时的操作都不能放在主线程进行,一旦主线程阻塞了,那么体现出来的就是界面卡了. 而我们读取视频和解码 ...
- Linux命令之shutdown
shutdown命令安全地将系统关机. 有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的.因为linux与windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失 ...
- HelloStruts
Hello Struts 建立项目 打开myeclipse 新建项目 选择myeclipse-java enterprise projects-web project 项目名称:hellostruts ...
- Java第06次实验提纲(集合)
PTA与参考资料 重要参考-集合简述 题集:jmu-Java-06-集合 集合实验文件 第1次实验 1.1 ArrayListIntegerStack(课堂演示) 可演示:jdk中的javadoc文档 ...
- zuul网关Filter处理流程及异常处理
本文转载自:https://blog.csdn.net/tianyaleixiaowu/article/details/77893822 上一篇介绍了java网关Zuul的简单使用,进行请求路由转发和 ...
- computer、methods和watch
在vue中处理复杂的逻辑的时候,我们经常使用计算属性computer,但是很多时候,我们会把计算属性.方法和侦听器搞混淆,在 w3cplus.com的一篇文章中是这样总结这三者的. methods:正 ...
- Spring Boot下Druid连接池+mybatis
目前Spring Boot中默认支持的连接池有dbcp,dbcp2, hikari三种连接池. 引言: 在Spring Boot下默认提供了若干种可用的连接池,Druid来自于阿里系的一个开源连 ...
- 廖雪峰Java3异常处理-2断言和日志-2使用JDK Logging
1.日志 为了取代System.out.println() 可以设置输出样式 可以设置输出级别,禁止某些级别输出 可以被重定向到文件 可以按包名控制日志级别 2.JDK内置Logging 在java. ...