angularjs学习笔记之双向数据绑定  更新时间:2015年09月26日 15:02:48   投稿:hebedich   AngularJS在$scope变量中使用脏值检查来实现了数据双向绑定。和Ember.js数据双向绑定中动态设施setter和getter不同,脏治检查允许AngularJS监视那些存在或者不存在的变量。 这次我们来详细讲解angular的双向数据绑定。 一.简单的例子     这个例子我们在第一节已经展示过了,要看的移步这里     这里实现的效果就是,在输入框输入内容,下面也会相应的改变对应的内容。这就实现了数据双向绑定。 二.取值表达式与ng-bind的使用     我们再看一个例子,点击这里,文中出现的第一个例子中,{{greeting.text}}和{{text}}就是一个取值表达式了,但是如果你一直刷新页面,你会发现这样一个问题,那就是页面有时候会一瞬间的出现“{{greeting.text}} {{text}}”这个字符串,那我们该如何解决呢?     这里就用到ng-bind命令了:用于绑定数据表达式。     比如我们可以把 {{greeting.text}} {{text}}     改为: “”;   这样改正之后,页面刷新就不会有不希望出现的字符串出现了。   但是使用命令总要比直接使用表达式的效率低一点,所以我们总结了一个常用规律:一般来说,index使用ng-bind,后续模版中的使用'{{}}’的形式。 三.双向绑定的典型场景-表单   先看一个form.html的内容: 双向数据绑定 邮箱: 密码: 自动登录 获取Form表单的值 设置Form表单的值 重置表单   再看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的内容: 测试CSS样式 绿色   我们看第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”,所以显示红色,点击时执行函数,变为绿色。 您可能感兴趣的文章: 详谈AngularJs 控制器、数据绑定、作用域 深入浅析AngularJS中的一次性数据绑定 (bindonce) AngularJS1.X学习笔记2-数据绑定详解 AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】 AngularJS入门教程之数据绑定原理详解 AngularJS入门教程之数据绑定用法示例 AngularJS 双向数据绑定详解简单实例 AngularJS实践之使用NgModelController进行数据绑定 详解JavaScript的AngularJS框架中的作用域与数据绑定 Angularjs中数据绑定的实例详解 angularjs 双向数据绑定 相关文章 AngularJS使用ui-route实现多层嵌套路由的示例 这篇文章主要介绍了AngularJS使用ui-route实现多层嵌套路由的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-01-01 Angularjs中UI Router全攻略 这篇文章主要介绍了Angularjs中UI Router全攻略,涉及到angularjs ui router的基本用法,需要的朋友参考下吧 2016-01-01 Angular5中提取公共组件之radio list的实例代码 这篇文章主要介绍了Angular5中提取公共组件之radio list的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下 2018-07-07 Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的写法 本篇文章主要介绍了Angular 2 ngForm中的ngModel、[ngModel]和[(ngModel)]的区别,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-06-06 简介AngularJS的视图功能应用 这篇文章主要介绍了AngularJS的视图功能应用,包括ng-view和ng-template以及$routeProvider的使用,以及 $routeProvider 需要的朋友可以参考下 2015-06-06 angular select 默认值设置方法 下面小编就为大家带来一篇angular select 默认值设置方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2017-06-06 分享使用AngularJS创建应用的5个框架 如果你计划使用AngularJS创建你的Web应用,那现在就开始吧。你不需要有任何的恐惧和担心,因为现在有很多的框架都可以很好地支持AngularJS 2015-12-12 Angular2里获取(input file)上传文件的内容的方法 这篇文章主要介绍了Angular2里获取(input file)上传文件的内容的方法,非常具有实用价值,需要的朋友可以参考下 2017-09-09 AngularJs的$http发送POST请求,php无法接收Post的数据问题及解决方案 这篇文章主要介绍了AngularJs的$http发送POST请求,php无法接收Post的数据的问题及解决方案,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 2020-08-08 AngularJS实现的回到顶部指令功能实例 这篇文章主要介绍了AngularJS实现的回到顶部指令功能,结合实例形式分析了AngularJS返回到顶部功能的具体步骤与相关实现技巧,需要的朋友可以参考下 2017-05-05 最新评论

这次我们来详细讲解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”,所以显示红色,点击时执行函数,变为绿色。

您可能感兴趣的文章:

  • 详谈AngularJs 控制器、数据绑定、作用域
  • 深入浅析AngularJS中的一次性数据绑定 (bindonce)
  • AngularJS1.X学习笔记2-数据绑定详解
  • AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
  • AngularJS入门教程之数据绑定原理详解
  • AngularJS入门教程之数据绑定用法示例
  • AngularJS 双向数据绑定详解简单实例
  • AngularJS实践之使用NgModelController进行数据绑定
  • 详解JavaScript的AngularJS框架中的作用域与数据绑定
  • Angularjs中数据绑定的实例详解
张贴在3