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

发布时间 - 2026-01-11 00:28:20    点击率:

上一篇从整体上认识了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}}这样的东西。

解决方法是使用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>

<!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时出错了

这是因为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

这样就可以了。

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>

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

7、小结一下

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

  

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


# angularjs  # 绑定数据  # angularjs的数据绑定  # 双向绑定  # 详谈AngularJs 控制器、数据绑定、作用域  # 深入浅析AngularJS中的一次性数据绑定 (bindonce)  # AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】  # AngularJS入门教程之数据绑定原理详解  # AngularJS入门教程之数据绑定用法示例  # AngularJS 双向数据绑定详解简单实例  # AngularJS实践之使用NgModelController进行数据绑定  # 详解JavaScript的AngularJS框架中的作用域与数据绑定  # angularjs学习笔记之双向数据绑定  # Angularjs中数据绑定的实例详解  # 绑定  # 你好啊  # 中国  # 的是  # 实现了  # 可以用  # 我爱  # 错了  # 这样做  # 只在  # 上一篇  # 能将  # 不知道为什么  # 比较多  # 会将  # 这是因为  # 它不  # 解决方法  # 你会发现  # 不信任 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 魔方云NAT建站如何实现端口转发?  什么是javascript作用域_全局和局部作用域有什么区别?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  Python结构化数据采集_字段抽取解析【教程】  如何在阿里云购买域名并搭建网站?  浅谈Javascript中的Label语句  详解Huffman编码算法之Java实现  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  C语言设计一个闪闪的圣诞树  Python正则表达式进阶教程_复杂匹配与分组替换解析  Laravel如何实现事件和监听器?(Event & Listener实战)  制作旅游网站html,怎样注册旅游网站?  如何在 Pandas 中基于一列条件计算另一列的分组均值  如何在橙子建站中快速调整背景颜色?  php485函数参数是什么意思_php485各参数详细说明【介绍】  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  Laravel怎么使用Intervention Image库处理图片上传和缩放  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  如何在云指建站中生成FTP站点?  Laravel如何保护应用免受CSRF攻击?(原理和示例)  JavaScript如何实现倒计时_时间函数如何精确控制  Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】  如何在橙子建站上传落地页?操作指南详解  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  如何将凡科建站内容保存为本地文件?  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  免费视频制作网站,更新又快又好的免费电影网站?  如何快速上传建站程序避免常见错误?  EditPlus中的正则表达式实战(5)  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  如何确保FTP站点访问权限与数据传输安全?  Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案  UC浏览器如何设置启动页 UC浏览器启动页设置方法  Java类加载基本过程详细介绍  新三国志曹操传主线渭水交兵攻略  Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  如何在万网利用已有域名快速建站?  Laravel PHP版本要求一览_Laravel各版本环境要求对照  SQL查询语句优化的实用方法总结  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  Python文件流缓冲机制_IO性能解析【教程】