详谈AngularJs 控制器、数据绑定、作用域


Posted in Javascript onJuly 09, 2017

上次分享完该系列文章后有朋友也建议说1.x版本除了维护也没有必要学习,可以学习2.0开始学习,我也知道1.x无论是从性能还是架构上都没有2.x好,但是我想因为现在也有一些朋友还在用1.x版本,因为1.x升级到2.x难度很大,甚至可以说重构,就向我们公司现在还在用1.x版本,所以我还是决定把这系列写完,也给自己一个整理的过程。本人现在也正在学习Angular4.0版本的学习,但是4.0用typescript及nodejs集成比较大,还有学习angular-cli脚手架的学习,所以等我学会以后准备在分享给大家。这个暂时先不讨论,今天继续给大家分享控制、数据绑定、作用域的知识点。

1、控制器:

概念:在angularJS中控制器是一个函数,用来向视图的作用域添加额外的功能,用来设置作用域的初始状态并添加自定义行为。

控制器的声明: app.controller(‘controllerName',function($scope){...})

//  控制器定义
  //  第一参数: 控制器名称, 第二个参数: 匿名函数, 传入作用域,并在作用域上添加额外功能
  app.controller('myCtrl', function($scope) {
    $scope.expression = "hello expression";
    $scope.ngbind = "hello ng-bind";
    $scope.htmlbind = "<font color='red'>hello,htmlbind</font>";
    $scope.subCtrl = "hello subCtrl";

  });

控制器的使用:在需要的地方(html某个标签上)添加ng-controller。

<body ng-app="myapp" ng-controller="myCtrl">

从上面看控制的定义和使用还是比较简单的,但是很多人会对控制器的作用及控制器中都需要写什么代码有些不了解,有的人会把整个代码都推挤到控制器中,我个人觉得控制器只是一个页面view及mode的一个纽带,只处理一些数据绑定,事件绑定等等一些列简单的逻辑,具体的服务器访问或者数据读取等应该在服务里去实现,服务我在下次的时候会详细给大家说。

我简单对控制使用方面注意的事项整理了一下,供大家参考:

1)尽可能精简控制器和$scope相关的操作。

2)不要复用Controller,一个控制器一般只负责一小块视图。

3)不要在Controller中操作DOM,这不是控制器的职责。

4)尽量不要在Controller里做数据过滤、数据操作。

5)一般来说,Controller里不会互相调用的,控制器之间的交互会通过事件进行

2、作用域($scope)

上面控制器中也提到作用域,控制器主要跟$scope相关的操作,我简单给大家说一下作用域在AngularJs中的作用及他的生命周期,我用内部分享时的总结贴出来给大家分享一下:

详谈AngularJs 控制器、数据绑定、作用域

详谈AngularJs 控制器、数据绑定、作用域

3、数据绑定:

AngularJs数据绑定也有好几种绑定,我给大家列出来,有可能大家都用过,有可能有的朋友有些绑定没有用过。

1)表达式{{}}:

常量:{{‘const'}}
变量:{{abc}}
函数:{{func()}}

表达式:{{a+b}}

该方法是最为常见的,表达式绑定,只要在Angular的作用域范围之内Angular遇到该表达式自动解析为Html识别的表达式或者变量。

2)指令方式(ng-bind):

该绑定方式为在元素上添加ng-bind指令,然后Angular解析指令并执行该绑定。

3)ng-model:

该方式主要用在表单提交方面用的比较多,实现数据双向绑定,页面内容及model之间实现双向数据。

4)ng-bind-html:

该方式为主要针对Html元素绑定时用,因为Angularjs默认对Html标签不做解析,直接输出,所以想在页面上显示Html标签内容可以借助该绑定方法,但是该绑定需要引用一个序列化js文件。

<script type="text/javascript" src="/lib/angular-1.3.0.14/angular-sanitize.min.js"></script>

5)ng-bind-template:

该方式可以一次绑定多个变量及表达式。

使用场景:

首页使用ng-bind, 模板里面的页面可以使用括号 {{}},表单使用ng-model,{{}}语法的缺陷:在用户的不断刷新中是有可能看到{}的;而且在网络不好的情况下也有可能看到

如下代码为把上述五种方法的整体代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>首页</title>
  <!--引用AngularJs库  -->
  <script type="text/javascript" src="/lib/angular-1.3.0.14/angular.js"></script>
  <!--  引入angularJs Html格式化库-->
  <script type="text/javascript" src="/lib/angular-1.3.0.14/angular-sanitize.min.js"></script>
</head>

<!--  数据绑定方式1、{{}} 2、指令绑定 3、ng-bind绑定 4、ng-bind-html绑定 5、ng-bind-template绑定-->

<body ng-app="myapp" ng-controller="myCtrl">
  <!--  1、表达式绑定 -->
  <h1>{{expression}}</h1>
  <!-- 2、指令绑定-->
  <h2>{{ngmodel}}</h2>
  <input type="text" ng-model="ngmodel">
  <!--  3、ng-bind绑定-->
  <h3 ng-bind="ngbind"></h3>
  <h3 class="ng-bind:ngbind"></h3>
  <!--  4、ng-bind-html绑定-->
  <h4 ng-bind-html="htmlbind"></h4>
  <!--  5、ng-bind-template -->
  <h5 ng-bind-template="{{ngbind}},{{1+1}}"></h5>
</body>

</html>
<script>
  //模块定义
  // 第一个参数:应用名称,第二个参数:应用依赖模块
  var app = angular.module('myapp', ['ngSanitize']);

  //  控制器定义
  //  第一参数: 控制器名称, 第二个参数: 匿名函数, 传入作用域,并在作用域上添加额外功能
  app.controller('myCtrl', function($scope) {
    $scope.expression = "hello expression";
    $scope.ngbind = "hello ng-bind";
    $scope.htmlbind = "<font color='red'>hello,htmlbind</font>";
    $scope.subCtrl = "hello subCtrl";

  });

</script>

以上这篇详谈AngularJs 控制器、数据绑定、作用域就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 给汉字排序实例代码
Jun 28 Javascript
Firefox中beforeunload事件的实现缺陷浅析
May 03 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
Jan 07 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
Jun 05 Javascript
html5+javascript实现简单上传的注意细节
Apr 18 Javascript
vue监听scroll的坑的解决方法
Sep 07 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
Jul 19 Javascript
vue template中slot-scope/scope的使用方法
Sep 06 Javascript
Vue.js 十五分钟入门图文教程
Sep 12 Javascript
element el-input directive数字进行控制
Oct 11 Javascript
小程序api实现promise封装过程解析
Nov 21 Javascript
JavaScript读取本地文件常用方法流程解析
Oct 12 Javascript
vue子父组件通信的实现代码
Jul 09 #Javascript
vue2中filter()的实现代码
Jul 09 #Javascript
Bootstrap 模态对话框只加载一次 remote 数据的完美解决办法
Jul 09 #Javascript
收藏AngularJS中最重要的核心功能
Jul 09 #Javascript
Bootstrap Multiselect 常用组件实现代码
Jul 09 #Javascript
解决JS外部文件中文注释出现乱码问题
Jul 09 #Javascript
JavaScrpt中如何使用 cookie 设置查看与删除功能
Jul 09 #Javascript
You might like
php与mysql建立连接并执行SQL语句的代码
2011/07/04 PHP
学习php过程中的一些注意点的总结
2013/10/25 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
js跨域问题之跨域iframe自适应大小实现代码
2010/07/17 Javascript
DD_belatedPNG,IE6下PNG透明解决方案(国外)
2010/12/06 Javascript
javascript 判断两个日期之差的示例代码
2015/09/05 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
第一次接触神奇的Bootstrap网格系统
2016/07/27 Javascript
vuex的module模块用法示例
2018/11/12 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
vue中监听返回键问题
2019/08/28 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
python监控网卡流量并使用graphite绘图的示例
2014/04/27 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
进一步理解Python中的函数编程
2015/04/13 Python
Python随机生成数模块random使用实例
2015/04/13 Python
详解python3中的真值测试
2018/08/13 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python实现梯度下降法
2020/03/24 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
opencv 图像轮廓的实现示例
2020/07/08 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
新加坡航空官方网站:Singapore Airlines
2016/10/13 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
NYX Professional Makeup英国官网:美国平价专业彩妆品牌
2019/11/13 全球购物
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
幼儿园中班开学寄语
2014/04/03 职场文书
学习张林森心得体会
2014/09/10 职场文书
工伤事故赔偿协议书范文
2014/09/24 职场文书
党员个人剖析材料(四风问题)
2014/10/07 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书