AngularJS1.X学习笔记2-数据绑定详解


Posted in Javascript onApril 01, 2017

上一篇从整体上认识了Angular,从现在开始更加深入的学习Angular的特性。本次学习的是数据绑定。应该所有的MVC框架都会用到数据绑定,比如我所知道的ThinkPHP、struts等,只有实现了数据绑定才能将模型层和视图层分离,实现MVC。Angular的数据绑定比较特别,它支持双向数据绑定。

1、ng-bind

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
 <meta charset="UTF-8">
 <title>databinding1</title>
</head>
<body>
 <h1 ng-controller='dataCtrl' ng-bind='data'>
  
 </h1>

 <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
 <script type="text/javascript">
  angular.module('myApp',[])
  .controller('dataCtrl',function($scope){
   $scope.data = "你好啊!";
  })
 </script>
</body>
</html>

ng-bind实现了一个简单单向绑定。

2、{{}}

类似ng-bind,用的比较多。

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
 <meta charset="UTF-8">
 <title>databinding1</title>
</head>
<body>
 <h1 ng-controller='dataCtrl'>
  {{data}}
 </h1>

 <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
 <script type="text/javascript">
  angular.module('myApp',[])
  .controller('dataCtrl',function($scope){
   $scope.data = "你好啊!";
  })
 </script>
</body>
</html>

这种绑定的缺点是,开始加载时可能会出现类似{{data}}这样的东西。

AngularJS1.X学习笔记2-数据绑定详解

解决方法是使用ng-bind或ng-cloak,ng-cloak应该只在有数据绑定的地方使用,否则处理中用户将看到空白。

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
 <meta charset="UTF-8">
 <title>databinding2</title>
</head>
<body ng-cloak>
 <h1 ng-controller='dataCtrl'>
  {{data}}
 </h1>

 <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
 <script type="text/javascript">
  angular.module('myApp',[])
  .controller('dataCtrl',function($scope){
   $scope.data = "你好啊!";
  })
 </script>
</body>
</html>

我测试了一下ng-cloak,不知道为什么不行,有人知道的话请告知一下。

3、ng-bind-html

这个指令可以用html的方式处理数据,它不会将html代码解析成实体。下面对比一下ng-bind和ng-bind-html.

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
 <meta charset="UTF-8">
 <title>databinding3</title>
</head>
<body>
 <div ng-controller='dataCtrl' ng-bind='data'>
  
 </div>

 <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
 <script type="text/javascript">
  angular.module('myApp',[])
  .controller('dataCtrl',function($scope){
   $scope.data = "<h1 style='color:red;'>你好啊</h1>";
  })
 </script>
</body>
</html>

AngularJS1.X学习笔记2-数据绑定详解

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
  <meta charset="UTF-8">
  <title>databinding3</title>
</head>
<body>
  <div ng-controller='dataCtrl' ng-bind-html='data'>
    
  </div>

  <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
  <script type="text/javascript">
    angular.module('myApp',[])
    .controller('dataCtrl',function($scope){
      $scope.data = "<h1 style='color:red;'>你好啊</h1>";
    })
  </script>
</body>
</html>

换成ng-bind-html时出错了

AngularJS1.X学习笔记2-数据绑定详解

这是因为Angular默认是不信任html的,所以要这样做。

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
 <meta charset="UTF-8">
 <title>databinding3</title>
</head>
<body>
 <div ng-controller='dataCtrl' ng-bind-html='data'>
  
 </div>

 <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
 <script type="text/javascript">
  angular.module('myApp',[])
  .controller('dataCtrl',function($scope,$sce){
   $scope.data = $sce.trustAsHtml("<h1 style='color:red;'>你好啊</h1>");
  })
 </script>
</body>
</html

这样就可以了。

AngularJS1.X学习笔记2-数据绑定详解

4、ng-bind-template

ng-bind只接受单个数据绑定表达式,而ng-bind-template则相对灵活些。

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
 <meta charset="UTF-8">
 <title>databinding3</title>
</head>
<body>
 <div ng-controller='dataCtrl' ng-bind-template='{{data1}}爱{{data2}} '>
  
 </div>

 <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
 <script type="text/javascript">
  angular.module('myApp',[])
  .controller('dataCtrl',function($scope,$sce){
   $scope.data1 = "我";
   $scope.data2 = "中国";
  })
 </script>
</body>
</html>
<!-- 我爱中国-->

5、ng-non-bindable

有时我们使用了{{}}但是我们并不是要绑定数据,直接用会出错,所以要像这样

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
 <meta charset="UTF-8">
 <title>databinding1</title>
</head>
<body>
 <h1 ng-controller='dataCtrl' ng-non-bindable>
  ng中绑定数据的方法是{{data}}
 </h1>

 <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
 <script type="text/javascript">
  angular.module('myApp',[])
  .controller('dataCtrl',function($scope){
   //$scope.data = "你好啊!";
  })
 </script>
</body>
</html>

6、双向数据绑定ng-model

双向数据绑定允许元素从用户处收集数据以改变程序状态。

<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
 <meta charset="UTF-8">
 <title>databinding5</title>
</head>
<body>
 <div ng-controller='dataCtrl'>
  <h1>{{data}}</h1>
  <input type="text" name="data" ng-model="data">
 </div>
  
 
 <script type="text/javascript" src="../node_modules/angular/angular.min.js"></script>
 <script type="text/javascript">
  angular.module('myApp',[])
  .controller('dataCtrl',function($scope){
   $scope.data = "你好啊!";
  })
 </script>
</body>
</html>

AngularJS1.X学习笔记2-数据绑定详解

你会发现文本框的内容和h1中的内容同步变化。

7、小结一下

与数据绑定的相关指令如下

AngularJS1.X学习笔记2-数据绑定详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 自动增长的文本输入框实现代码
Apr 02 Javascript
JavaScript 设计模式 富有表现力的Javascript(一)
May 26 Javascript
node.js中的path.extname方法使用说明
Dec 09 Javascript
CSS图片响应式 垂直水平居中
Aug 14 Javascript
基于socket.io+express实现多房间聊天
Mar 17 Javascript
全面了解javascript中的错误处理机制
Jul 18 Javascript
Angular 4依赖注入学习教程之简介(一)
Jun 04 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
Jul 27 Javascript
Vue的轮播图组件实现方法
Mar 03 Javascript
Vue源码解读之Component组件注册的实现
Aug 24 Javascript
使用ThinkJs搭建微信中控服务的实现方法
Aug 08 Javascript
基于ant design日期控件使用_仅月份的操作
Oct 27 Javascript
Angularjs使用指令做表单校验的方法
Mar 31 #Javascript
JS正则获取HTML元素的方法
Mar 31 #Javascript
JS+CSS实现下拉刷新/上拉加载插件
Mar 31 #Javascript
ES6中Generator与异步操作实例分析
Mar 31 #Javascript
微信公众号菜单配置微信小程序实例详解
Mar 31 #Javascript
ES6中Iterator与for..of..遍历用法分析
Mar 31 #Javascript
node.js平台下的mysql数据库配置及连接
Mar 31 #Javascript
You might like
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
php中防止SQL注入的最佳解决方法
2013/04/25 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
jquery select下拉框操作的一些说明
2010/04/02 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
jquery手风琴特效插件
2015/02/04 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
jQuery Validation Plugin验证插件手动验证
2016/01/26 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
Vue监听数据对象变化源码
2017/03/09 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
vue中路由跳转不计入history的操作
2020/09/21 Javascript
一篇文章看懂JavaScript中的回调
2021/01/05 Javascript
Python中条件判断语句的简单使用方法
2015/08/21 Python
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
浅谈Django REST Framework限速
2017/12/12 Python
python Pexpect 实现输密码 scp 拷贝的方法
2019/01/03 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
详解Python文件修改的两种方式
2019/08/22 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
HTML5超文本标记语言的实现方法
2020/09/24 HTML / CSS
英国时尚首饰品牌:Missoma
2020/06/29 全球购物
PHP如何自定义函数
2016/09/16 面试题
日语专业个人的求职信
2013/12/03 职场文书
会计求职自荐信
2014/06/20 职场文书
机关干部个人对照检查材料思想汇报
2014/09/28 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
简历自我评价优缺点
2015/03/11 职场文书
员工加薪申请报告
2015/05/15 职场文书
给校长的建议书作文500字
2015/09/14 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
redis数据一致性的实现示例
2022/03/18 Redis