AngularJS入门心得之directive和controller通信过程  更新时间:2016年01月25日 14:29:37   投稿:mrr   Angular JS (Angular.JS) 是一组用来开发Web页面的框架、模板以及数据绑定和丰富UI组件,接下来通过本文给大家介绍AngularJS入门心得之directive和controller通信过程,对angularjs相关知识感兴趣的朋友一起学习吧 AngularJS 通过新的属性和表达式扩展了 HTML。Angularjs学习起来也非常的简单。 1.AngularJS是何方神圣 Angular JS (Angular.JS) 是一组用来开发Web页面的框架、模板以及数据绑定和丰富UI组件。它支持整个开发进程,提供web应用的架构,无需进行手工DOM操作。 AngularJS是为了克服HTML在构建应用上的不足而设计的。HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了。这里AngularJS就应运而生,弥补了HTML的天然缺陷,用于构件Web应用等。 2.如何了解AngularJS AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。 AngularJS官网 : http://www.angularjs.org (一般来说会被墙掉,所以可以访问下面的网站) AngularJS中文网站 : http://www.ngnice.com 书籍 :《AngularJS 权威教程》《用AngularJS开发下一代Web应用》等。个人意见,For your information 备注 :视频教程,最近有看过大漠老师的AngularJS教程,觉得还不错,但是感觉没有一点基础还是听不懂的,或者要看好几遍(不是做广告) 3.为什么要了解AngularJS 一项新技术能够面世,为众人所知,从而脱引而出,定然不是空穴来风,肯定有其标新立异的过人之处,主要有以下几点: (1)MVC的思想(或者是MVVM) (2)模块化和依赖注入 (3)双向数据绑定 (4)指令 每一个特性都可以大篇幅的展开,显然,目前能力不够,没法展开,有兴趣可以网上搜下,大体了解。 今天主要来说说AngularJS的三个指令“ @ ”,“ = ”,“ & ”的用法和区别(这个问题困扰了我大半天,和Frank交流多次,我才明白) 1.指令作用域中的@ 作用是把当前属性作为字符串传递。 先上代码,前台界面: JS代码: var myModule = angular.module(“MyModule”, []); myModule.controller(‘MyCtrl’, [‘$scope’, function($scope){ $scope.pureWater=”纯净水”; }]) myModule.directive(“drink”, function() { return { restrict:’AE’, scope:{ water:’@’ }, template:”{{water}}” } }); 执行的结果平淡无奇,却暗藏玄机:  (1) HTML页面中,声明一个标签,其中定义一个属性名:water 属性值:pureWater(这里的{{}}是angularjs的一种常见表达式,类似于ng-model,用于值绑定) (2) JS文件中,首先从模块开始,然后创建一个控制器行2~行4,再定义一个指令,主要实现的是将””替换为”{{water}}”标签显示 (3) 重点介绍这里的 scope:{ water:’@’ } 该表达式等价于: link:function(scope,element,attrs){ scope.water=attrs.water; } 具体含义就是在指令的scope上定义一个属性名:water,它的值就是前台界面中water属性的值,也就是”{{pureWater}}”; 同时{{pureWater}}的值我们从声明的控制器可以看出: $scope.pureWater=”纯净水”; 所以最终页面显示的是“纯净水”,主要的流程就是: a.在指令中,通过@实现指令与HTML页面元素关联; b.在控制器中又实现了与页面的联系; c.从而借助HTML页面建立起控制器与指令的联系,也是一种通讯方式。 具体见下图:   2.指令作用域中的= 作用是与父scope中的属性进行双向绑定。 Ctrl: Directive: var myModule = angular.module(“MyModule”, []); myModule.controller(‘MyCtrl’, [‘$scope’, function($scope){ $scope.pureWater=”纯净水”; }]) myModule.directive(“drink”, function() { return { restrict:’AE’, scope:{ water:’=’ }, template:” } }); 这里=的手段类似,通过页面设置两个输入框,分别代表指令和控制器的作用域,在JS代码实现了双向绑定,做到了控制器与指令在各自作用域内能够影响对方,也就是双向通信,具体思路与@类似,不赘述,上图: 3.指令作用域中的& 主要作用是传递一个来自父scope的函数,稍后调用。 var myModule = angular.module(“MyModule”, []); myModule.controller(‘MyCtrl’, [‘$scope’, function($scope){ $scope.sayHello=function(name){ alert(“Hello “+name); } }]) myModule.directive(“greeting”, function() { return { restrict:’AE’, scope:{ greet:’&’ }, template:”+ ‘Greeting’ } }); 从页面可以看出,这里定义了一个标签,并在其中定义了属性名greet,与上面的@以及=不同的是,属性名后面是一个方法,所以,这里的&主要用于在Controller和directive之间传递函数,实现两者之间的函数通信,在JS中,将前台的greeting标签替换为template中的内容,一个输入框加上一个按钮,按钮上绑定了greet函数,与前台页面的greet相呼应,而前台的greet函数在控制器中有定义,所以指令中也是调用的控制器中的greet函数。执行结果如下: (1)初始界面   (2)在第一个文本框填值   (2)在第二个文本框填值   (3)在第三个文本框填值   您可能感兴趣的文章: AngularJS控制器之间的通信方式详解 AngularJS控制器controller正确的通信的方法 AngularJS控制器之间的数据共享及通信详解 AngularJS开发教程之控制器之间的通信方法分析 详解AngularJS的通信机制 angular中不同的组件间传值与通信的方法 AngularJS全局scope与Isolate scope通信用法示例 Angularjs的Controller间通信机制实例分析 Angular2 父子组件通信方式的示例 Angularjs实现控制器之间通信方式实例总结 angularjs 入门 directive controller 相关文章 Angular外部使用js调用Angular控制器中的函数方法或变量用法示例 这篇文章主要介绍了Angular外部使用js调用Angular控制器中的函数方法或变量用法,结合实例形式分析了Angular基于外部JS调用控制器中方法与变量的具体实现步骤与相关技巧,需要的朋友可以参考下 2016-08-08 深入浅析AngularJS中的module(模块) 我们所说的模块,是你的AngularJS应用程序的一个组成部分,它可以是一个Controller,也可以是一个Service服务,也可以是一个过滤器(Filter),也可以是一个directive(指令)等等…都是属于一个模块,本文给大家介绍AngularJS中的module(模块) ,感兴趣的朋友一起学习吧 2016-01-01 解决angularjs前后端分离调用接口传递中文时中文乱码的问题 今天小编就为大家分享一篇解决angularjs前后端分离调用接口传递中文时中文乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 2018-08-08 AngularJS 单元测试(一)详解 这篇文章主要介绍了AngularJS 单元测试(一)详解的相关资料,需要的朋友可以参考下 2016-09-09 Angular2库初探 本文将侧重点放到npm上来,看看npm平台给ng2带来的酷炫的帮助。具有很好的参考价值,下面跟着小编一起来看下吧 2017-03-03 Angularjs的启动过程分析 本篇文章主要介绍了Angularjs的启动过程分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2017-07-07 AngularJS中一般函数参数传递用法分析 这篇文章主要介绍了AngularJS中一般函数参数传递用法,结合实例形式分析了模型参数与普通参数的具体功能与使用技巧,需要的朋友可以参考下 2016-11-11 AngularJs expression详解及简单示例 本文主要介绍AngularJs expression,这里整理了详细的资料,并附示例代码,有兴趣的小伙伴可以参考下 2016-09-09 AngularJS实现星星等级评分功能 这篇文章主要为大家详细介绍了AngularJS实现星星等级评分功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2016-09-09 基于AngularJS拖拽插件ngDraggable.js实现拖拽排序功能 ngDraggable.js是一款比较简单实用的angularJS拖拽插件,借助于封装好的一些自定义指令,能够快速的进行一些拖拽应用开发。本文先从基本概念入手,给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友参考下吧 2019-04-04 最新评论

AngularJS 通过新的属性和表达式扩展了 HTML。Angularjs学习起来也非常的简单。

1.AngularJS是何方神圣

Angular JS (Angular.JS) 是一组用来开发Web页面的框架、模板以及数据绑定和丰富UI组件。它支持整个开发进程,提供web应用的架构,无需进行手工DOM操作。

AngularJS是为了克服HTML在构建应用上的不足而设计的。HTML是一门很好的为静态文本展示设计的声明式语言,但要构建WEB应用的话它就显得乏力了。这里AngularJS就应运而生,弥补了HTML的天然缺陷,用于构件Web应用等。

2.如何了解AngularJS

AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。

AngularJS官网 : http://www.angularjs.org (一般来说会被墙掉,所以可以访问下面的网站)

AngularJS中文网站 : http://www.ngnice.com

书籍 :《AngularJS 权威教程》《用AngularJS开发下一代Web应用》等。个人意见,For your information

备注 :视频教程,最近有看过大漠老师的AngularJS教程,觉得还不错,但是感觉没有一点基础还是听不懂的,或者要看好几遍(不是做广告)

3.为什么要了解AngularJS

一项新技术能够面世,为众人所知,从而脱引而出,定然不是空穴来风,肯定有其标新立异的过人之处,主要有以下几点:

(1)MVC的思想(或者是MVVM)

(2)模块化和依赖注入

(3)双向数据绑定

(4)指令

每一个特性都可以大篇幅的展开,显然,目前能力不够,没法展开,有兴趣可以网上搜下,大体了解。

今天主要来说说AngularJS的三个指令“ @ ”,“ = ”,“ & ”的用法和区别(这个问题困扰了我大半天,和Frank交流多次,我才明白)

1.指令作用域中的@

作用是把当前属性作为字符串传递。

先上代码,前台界面:

<!doctype html>
<html ng-app="MyModule">
<head>
<meta charset="utf-">
<link rel="stylesheet" href="../css/bootstrap.css">
</head>
<body>
<div ng-controller="MyCtrl">
<drink water="{{pureWater}}"></drink>
</div>
</body>
<script src="../js/angular.js">
<script src="ScopeAt.js"></script>
</html>

JS代码:

var myModule = angular.module("MyModule", []);
myModule.controller('MyCtrl', ['$scope', function($scope){
$scope.pureWater="纯净水";
}])
myModule.directive("drink", function() {
return {
restrict:'AE',
scope:{
water:'@'
},
template:"<div>{{water}}</div>"
}
});

执行的结果平淡无奇,却暗藏玄机: 

(1) HTML页面中,声明一个标签<drink></drink>,其中定义一个属性名:water 属性值:pureWater(这里的{{}}是angularjs的一种常见表达式,类似于ng-model,用于值绑定)

(2) JS文件中,首先从模块开始,然后创建一个控制器行2~行4,再定义一个指令,主要实现的是将”<drink></drink>”替换为”<div>{{water}}</div>”标签显示

(3) 重点介绍这里的

scope:{
water:'@'
}

该表达式等价于:

link:function(scope,element,attrs){
scope.water=attrs.water;
}

具体含义就是在指令的scope上定义一个属性名:water,它的值就是前台界面中water属性的值,也就是”{{pureWater}}”;

同时{{pureWater}}的值我们从声明的控制器可以看出:

$scope.pureWater=”纯净水”;

所以最终页面显示的是“纯净水”,主要的流程就是:

a.在指令中,通过@实现指令与HTML页面元素关联;

b.在控制器中又实现了与页面的联系;

c.从而借助HTML页面建立起控制器与指令的联系,也是一种通讯方式。

具体见下图:

 

2.指令作用域中的=

作用是与父scope中的属性进行双向绑定。

<!doctype html>
<html ng-app="MyModule">
<head>
<meta charset="utf-">
<link rel="stylesheet" href="../css/bootstrap.css">
</head>
<body>
<div ng-controller="MyCtrl">
Ctrl:
<br>
<input type="text" ng-model="pureWater">
<br>
Directive:
<br>
<drink water="pureWater"></drink>
</div>
</body>
<script src="../js/angular.js"></script>
<script src="ScopeEqual.js"></script>
</html>
var myModule = angular.module("MyModule", []);
myModule.controller('MyCtrl', ['$scope', function($scope){
$scope.pureWater="纯净水";
}])
myModule.directive("drink", function() {
return {
restrict:'AE',
scope:{
water:'='
},
template:'<input type="text" ng-model="water"/>'
}
});

这里=的手段类似,通过页面设置两个输入框,分别代表指令和控制器的作用域,在JS代码实现了双向绑定,做到了控制器与指令在各自作用域内能够影响对方,也就是双向通信,具体思路与@类似,不赘述,上图:

3.指令作用域中的&

主要作用是传递一个来自父scope的函数,稍后调用。

<!doctype html>
<html ng-app="MyModule">
<head>
<meta charset="utf-">
<link rel="stylesheet" href="../css/bootstrap.css">
</head>
<body>
<div ng-controller="MyCtrl">
<greeting greet="sayHello(name)"></greeting>
<greeting greet="sayHello(name)"></greeting>
<greeting greet="sayHello(name)"></greeting>
</div>
</body>
<script src="../js/angular.js"></script>
<script src="ScopeAnd.js"></script>
</html>
var myModule = angular.module("MyModule", []);
myModule.controller('MyCtrl', ['$scope', function($scope){
$scope.sayHello=function(name){
alert("Hello "+name);
}
}])
myModule.directive("greeting", function() {
return {
restrict:'AE',
scope:{
greet:'&'
},
template:'<input type="text" ng-model="userName" /><br/>'+
'<button class="btn btn-default" ng-click="greet({name:userName})">Greeting</button><br/>'
}
});

从页面可以看出,这里定义了一个标签<greeting></greeting>,并在其中定义了属性名greet,与上面的@以及=不同的是,属性名后面是一个方法,所以,这里的&主要用于在Controller和directive之间传递函数,实现两者之间的函数通信,在JS中,将前台的greeting标签替换为template中的内容,一个输入框加上一个按钮,按钮上绑定了greet函数,与前台页面的greet相呼应,而前台的greet函数在控制器中有定义,所以指令中也是调用的控制器中的greet函数。执行结果如下:

(1)初始界面

 

(2)在第一个文本框填值

 

(2)在第二个文本框填值

 

(3)在第三个文本框填值

 

您可能感兴趣的文章:

  • AngularJS控制器之间的通信方式详解
  • AngularJS控制器controller正确的通信的方法
  • AngularJS控制器之间的数据共享及通信详解
  • AngularJS开发教程之控制器之间的通信方法分析
  • 详解AngularJS的通信机制
  • angular中不同的组件间传值与通信的方法
  • AngularJS全局scope与Isolate scope通信用法示例
  • Angularjs的Controller间通信机制实例分析
  • Angular2 父子组件通信方式的示例
  • Angularjs实现控制器之间通信方式实例总结
张贴在3