双向数据绑定是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-showtrue 时元素显示,false时元素隐藏;ng-hide则相反。在controller中改变ng-show的值即可实现元素的显示/隐藏。

以上三个实际开发中常见的场景用angular的双向数据绑定实现起来比传统方式高效便捷多了。

最新文章

  1. pdfbox加载pdf时遇到wrappedioexception报错处理方式
  2. 软件工程(FZU2015)赛季得分榜,第四回合
  3. 【leetcode】Remove Linked List Elements(easy)
  4. Java问题:Quartz,Hibernate,Spring,Tomcat中定时任务无故停止,没有错误
  5. 云计算中iaas、paas、saas的区别和联系
  6. PHP使用缓存生成静态页面
  7. IOS之KVC机制(Object-C篇)
  8. zookeeper[2] zookeeper原理(转)
  9. [补档][NOIP2015] 斗地主
  10. Kafka 0.11.0.0 实现 producer的Exactly-once 语义(官方DEMO)
  11. 小程序之根据参数更改title
  12. php-fpm 的 pm.start_servers 参数调整
  13. 【bzoj2194】快速傅立叶之二 FFT
  14. mybatis动态sql——(六)
  15. Docker之宿主机ssh至docker容器
  16. UVa 11292 勇者斗恶龙
  17. Java XML SAX 解析注意
  18. Linux 开机过程(转)
  19. tftp 开发板ping不通PC机
  20. 简明依赖注入(Dependency Injection)

热门文章

  1. Docker无法启动问题
  2. Linux shell脚本读取用户输入的参数
  3. 黄聪:Android酷炫实用的开源框架(UI框架)(转)
  4. 解决nginx转发websocket报400错误
  5. vue element-ui 用checkebox 来模拟选值 1/0
  6. Kubernetes DNS服务配置案例
  7. 客户端负载均衡Feign之一:申明式服务调用Feign入门示例
  8. switch语句的功能是否完全可以使用if else多选择结构来代替?如果是,为什么还需要switch结构?
  9. [UE4]移动相机,使用Arrow组件来标记移动位置
  10. android Information:Gradle tasks [:dl_version:generateDebugSources, :dl_version:generateDebugAndroidTestSources导致无法实现Preview功能