angularjs学习笔记之双向数据绑定


Posted in Javascript onSeptember 26, 2015

这次我们来详细讲解angular的双向数据绑定。

一.简单的例子

    这个例子我们在第一节已经展示过了,要看的移步这里

    这里实现的效果就是,在输入框输入内容,下面也会相应的改变对应的内容。这就实现了数据双向绑定。

二.取值表达式与ng-bind的使用

    我们再看一个例子,点击这里,文中出现的第一个例子中,{{greeting.text}}和{{text}}就是一个取值表达式了,但是如果你一直刷新页面,你会发现这样一个问题,那就是页面有时候会一瞬间的出现“{{greeting.text}} {{text}}”这个字符串,那我们该如何解决呢?

    这里就用到ng-bind命令了:用于绑定数据表达式。

    比如我们可以把

<p>{{greeting.text}} {{text}}</p>

    改为:

"<p><span ng-bind="greeting.text"></span><span ng-bind="text"></span></p>";

这样改正之后,页面刷新就不会有不希望出现的字符串出现了。

但是使用命令总要比直接使用表达式的效率低一点,所以我们总结了一个常用规律:一般来说,index使用ng-bind,后续模版中的使用'{{}}'的形式。

三.双向绑定的典型场景-表单

先看一个form.html的内容:

<!doctype html>
<html ng-app="UserInfoModule">

<head>
 <meta charset="utf-8">
 <link rel="stylesheet" href="css/bootstrap-3.0.0/css/bootstrap.css">
 <script src="js/angular-1.3.0.js"></script>
 <script src="Form.js"></script>
</head>

<body>
 <div class="panel panel-primary">
  <div class="panel-heading">
   <div class="panel-title">双向数据绑定</div>
  </div>
  <div class="panel-body">
   <div class="row">
    <div class="col-md-12">
     <form class="form-horizontal" role="form" ng-controller="UserInfoCtrl">
      <div class="form-group">
       <label class="col-md-2 control-label">
        邮箱:
       </label>
       <div class="col-md-10">
        <input type="email" class="form-control" placeholder="推荐使用126邮箱" ng-model="userInfo.email">
       </div>
      </div>
      <div class="form-group">
       <label class="col-md-2 control-label">
        密码:
       </label>
       <div class="col-md-10">
        <input type="password" class="form-control" placeholder="只能是数字、字母、下划线" ng-model="userInfo.password">
       </div>
      </div>
      <div class="form-group">
       <div class="col-md-offset-2 col-md-10">
        <div class="checkbox">
         <label>
          <input type="checkbox" ng-model="userInfo.autoLogin">自动登录
         </label>
        </div>
       </div>
      </div>
      <div class="form-group">
       <div class="col-md-offset-2 col-md-10">
        <button class="btn btn-default" ng-click="getFormData()">获取Form表单的值</button>
        <button class="btn btn-default" ng-click="setFormData()">设置Form表单的值</button>
        <button class="btn btn-default" ng-click="resetForm()">重置表单</button>
       </div>
      </div>
     </form>
    </div>
   </div>
  </div>
 </div>
</body>

</html>

再看Form.js的内容:

var userInfoModule = angular.module('UserInfoModule', []);
 userInfoModule.controller('UserInfoCtrl', ['$scope',
  function($scope) {
   $scope.userInfo = {
    email: "253445528@qq.com",
    password: "253445528",
    autoLogin: true
   };
   $scope.getFormData = function() {
    console.log($scope.userInfo);
   };
   $scope.setFormData = function() {
    $scope.userInfo = {
     email: 'testtest@126.com',
     password: 'testtest',
     autoLogin: false
    }
   };
   $scope.resetForm = function() {
    $scope.userInfo = {
     email: "253445528@qq.com",
     password: "253445528",
     autoLogin: true
    };
   }
  }
 ])

实现效果截图如下:

上图实现的功能是:

1.点击”获取“,可以在控制台输出三个数据,邮箱、密码和选中状态(true、false)

2.点击“设置”:可以更改两个输入框的值和复选框取消选中的状态;

3.点击“重置”:可以让数据恢复到初始数据。

因为输入框中的ng-model和控制器中的数值实现了双向绑定,所以更改输入框的值或者更改控制器中的值,都会相应的更改双方的值。就这么几行代码,就实现了这么强大的功能,是不是觉得很神奇呢?确实很神奇,不过,更加神奇的还在后面呢!继续吧!

四.动态切换标签样式

先看color.html的内容:

<!doctype html>
<html ng-app="MyCSSModule">

<head>
  <meta charset="utf-8">
  <link rel="stylesheet" href="CSS1.css">
</head>
<style type="text/css">
  .text-red {
    background-color: #ff0000; 
  }
  .text-green {
    background-color: #00ff00;
  }
</style>

<body>
  <div ng-controller="CSSCtrl">
    <p class="text-{{color}}">测试CSS样式</p>
    <button class="btn btn-default" ng-click="setGreen()">绿色</button>
  </div>
</body>
<script src="js/angular-1.3.0.js"></script>
<script src="color.js"></script>

</html>

我们看第19行:有一个“color”的变量存在于这个p标签中,当点击“绿色”时,执行setGreen函数,改变“color”的值为“green”,所以更改了类名,从而也更改了背景颜色。使用这样的方法,让我们不用去直接操作元素,而是加一个变量就行了。代码简洁直观。

我们再看一下color.js的内容:

var myCSSModule = angular.module('MyCSSModule', []);
myCSSModule.controller('CSSCtrl', ['$scope',
  function($scope) {
    $scope.color = "red";
    $scope.setGreen = function() {
      $scope.color = "green";
    }
  }
])

属性“color”的默认值为“red”,所以显示红色,点击时执行函数,变为绿色。

Javascript 相关文章推荐
Knockout数组(observable)使用详解示例
Nov 15 Javascript
jQuery中:first-child选择器用法实例
Dec 31 Javascript
JavaScript使用位运算符判断奇数和偶数的方法
Jun 01 Javascript
JavaScript和HTML DOM的区别与联系及Javascript和DOM的关系
Nov 15 Javascript
基于jquery实现无限级树形菜单
Mar 22 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
Aug 02 Javascript
纯js实现倒计时功能
Jan 06 Javascript
VUE element-ui 写个复用Table组件的示例代码
Nov 18 Javascript
js中的 || 与 &amp;&amp; 运算符详解
May 24 Javascript
JS module的导出和导入的实现代码
Feb 25 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
Aug 09 Javascript
vue柱状进度条图像的完美实现方案
Aug 26 Javascript
JS非Alert实现网页右下角“未读信息”效果弹窗
Sep 26 #Javascript
angularjs学习笔记之完整的项目结构
Sep 26 #Javascript
jQuery实现的登录浮动框效果代码
Sep 26 #Javascript
angularjs学习笔记之三大模块(modal,controller,view)
Sep 26 #Javascript
JS实现可拖曳、可关闭的弹窗效果
Sep 26 #Javascript
JS实现网页Div层Clone拖拽效果
Sep 26 #Javascript
jQuery超简单选项卡完整实例
Sep 26 #Javascript
You might like
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
本地机apache配置基于域名的虚拟主机详解
2013/08/10 PHP
php使用mb_check_encoding检查字符串在指定的编码里是否有效
2013/11/07 PHP
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
2012/12/24 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
基于JQuery的购物车添加删除以及结算功能示例
2017/03/08 Javascript
微信小程序 实现点击添加移除class
2017/06/12 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
2018/08/31 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
了解重排与重绘
2019/05/29 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
[29:10]Ti4 冒泡赛第二天 NEWBEE vs Titan 3
2014/07/15 DOTA
Python实现在Linux系统下更改当前进程运行用户
2015/02/04 Python
玩转python selenium鼠标键盘操作(ActionChains)
2020/04/12 Python
Python数据分析之双色球中蓝红球分析统计示例
2018/02/03 Python
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
使用python将图片格式转换为ico格式的示例
2018/10/22 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
python生成word合同的实例方法
2021/01/12 Python
pandas 按日期范围筛选数据的实现
2021/02/20 Python
基于CSS3 animation动画属性实现轮播图效果
2017/09/12 HTML / CSS
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
博士学位自我鉴定范文
2013/12/26 职场文书
好的演讲稿开场白
2013/12/30 职场文书
考试作弊检讨
2015/01/27 职场文书
员工辞职信范文大全
2015/05/12 职场文书
动画电影《擅长捉弄人的高木同学》6月10日上映!
2022/03/20 日漫