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 相关文章推荐
Javascript中的Split使用方法与技巧
Mar 09 Javascript
建立良好体验度的Web注册系统ajax
Jul 09 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
Jul 30 Javascript
js获取或设置当前窗口url参数的小例子
Oct 14 Javascript
javascript实现带节日和农历的日历特效
Feb 01 Javascript
精通JavaScript的this关键字
May 28 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
May 23 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
May 02 Javascript
微信小程序中吸底按钮适配iPhone X方案
Nov 29 Javascript
Node.js中DNS模块学习总结
Feb 28 Javascript
JavaScript canvas实现雪花随机动态飘落
Feb 08 Javascript
通过实例解析jQ Ajax操作相关原理
Sep 23 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
德生PL990的分析评价
2021/03/02 无线电
Ajax PHP简单入门教程代码
2008/04/25 PHP
微信公众号开发客服接口实例代码
2016/10/21 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
Laravel框架下载,安装及路由操作图文详解
2019/12/04 PHP
自用js开发框架小成 学习js的朋友可以看看
2010/11/16 Javascript
基于jQuery实现的Ajax 验证用户名是否存在的实现代码
2011/04/06 Javascript
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
AngularJS实现表单手动验证和表单自动验证
2015/12/09 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
javascript中new Array()和var arr=[]用法区别
2017/12/01 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
Vue隐藏显示、只读实例代码
2018/07/18 Javascript
JavaScript如何判断input数据类型
2020/02/06 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
react-intl实现React国际化多语言的方法
2020/09/27 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
[01:03:50]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第二场 2月7日
2021/03/11 DOTA
使用grappelli为django admin后台添加模板
2014/11/18 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
python subprocess 杀掉全部派生的子进程方法
2017/01/16 Python
Python实现ping指定IP的示例
2018/06/04 Python
基于python的ini配置文件操作工具类
2019/04/24 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
Python开发企业微信机器人每天定时发消息实例
2020/03/17 Python
盛大二次面试题
2016/11/18 面试题
研讨会主持词
2014/04/02 职场文书
出生公证书样本
2014/04/04 职场文书
办理护照工作证明
2014/10/10 职场文书
2015教师年度工作总结范文
2015/04/07 职场文书
人身损害赔偿协议书
2016/03/22 职场文书