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 相关文章推荐
js中查找最近的共有祖先元素的实现代码
Dec 30 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
Sep 09 Javascript
jquery选择器之层级过滤选择器详解
Jan 27 Javascript
javascript跨域总结之window.name实现的跨域数据传输
Nov 01 Javascript
原生js图片轮播效果实现代码
Oct 19 Javascript
javascript显示系统当前时间代码
Dec 29 Javascript
AngularJS Select(选择框)使用详解
Jan 18 Javascript
VueRouter导航守卫用法详解
Dec 25 Javascript
Taro集成Redux快速上手的方法示例
Jun 21 Javascript
jquery实现购物车基本功能
Oct 25 jQuery
详解Angular Karma测试的持续集成实践
Nov 15 Javascript
解决vue项目axios每次请求session不一致的问题
Oct 24 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错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
为你的网站增加亮点的9款jQuery插件推荐
2011/05/03 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
js将控件隐藏及display属性的使用介绍
2013/12/30 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
jQuery AjaxUpload 上传图片代码
2016/02/02 Javascript
jQuery模拟爆炸倒计时功能实例代码
2017/08/21 jQuery
Vue.js最佳实践(五招助你成为vuejs大师)
2018/05/04 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
详解vue使用插槽分发内容slot的用法
2019/03/28 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
使用node.JS中的url模块解析URL信息
2020/02/06 Javascript
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
使用Python从零开始撸一个区块链
2018/03/14 Python
Python实现合并两个列表的方法分析
2018/05/28 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
Python3实现腾讯云OCR识别
2018/11/27 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
Numpy的简单用法小结
2019/08/28 Python
Pandas+Matplotlib 箱式图异常值分析示例
2019/12/09 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
python argparse模块通过后台传递参数实例
2020/04/20 Python
Django权限设置及验证方式
2020/05/13 Python
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
市三好学生主要事迹
2014/01/28 职场文书
考试作弊检讨书大全
2014/02/18 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
审美与表现自我评价
2015/03/09 职场文书
党员违纪检讨书
2015/05/05 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
JS高级程序设计之class继承重点详解
2022/07/07 Javascript