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 相关文章推荐
iframe窗口高度自适应的实现方法
Jan 08 Javascript
使用jQuery判断IE浏览器版本的代码
Jun 14 Javascript
使用jQuery实现验证上传图片的格式与大小
Dec 03 Javascript
javascript面向对象之访问对象属性的两种方式分析
Jan 13 Javascript
浅谈JavaScript Math和Number对象
Jan 26 Javascript
JS控制表格实现一条光线流动分割行的方法
Mar 09 Javascript
jquery实现表格隔行换色效果
Nov 19 Javascript
js判断是否为空和typeof的用法(详解)
Oct 07 Javascript
基于zepto.js实现手机相册功能
Jul 11 Javascript
Vue-路由导航菜单栏的高亮设置方法
Mar 17 Javascript
微信小程序之判断页面滚动方向的示例代码
Aug 30 Javascript
手把手15分钟搭一个企业级脚手架
Sep 16 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
php5 apache 2.2 webservice 创建与配置(java)
2011/01/27 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
destoon设置自定义搜索的方法
2014/06/21 PHP
php图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
菜单效果
2006/10/14 Javascript
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
JQuery 解析多维的Json数据格式
2009/11/02 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
JQuery自动触发事件的方法
2015/06/13 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
JavaScript中原型链存在的问题解析
2016/09/25 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
Angular实现的简单查询天气预报功能示例
2017/12/27 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
利用Vue构造器创建Form组件的通用解决方法
2018/12/03 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
使用python验证代理ip是否可用的实现方法
2018/07/25 Python
python修改txt文件中的某一项方法
2018/12/29 Python
python调用外部程序的实操步骤
2019/03/04 Python
python 实现查找文件并输出满足某一条件的数据项方法
2019/06/12 Python
Pycharm运行加载文本出现错误的解决方法
2019/06/27 Python
匡威西班牙官网:Converse西班牙
2019/10/01 全球购物
企业晚会策划方案
2014/05/29 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
高中班主任评语
2014/12/30 职场文书
2016情人节宣传语
2015/07/14 职场文书
2016年感恩节寄语
2015/12/07 职场文书
Java实现聊天机器人完善版
2021/07/04 Java/Android