angularjs指令之绑定策略(@、=、&)


Posted in Javascript onApril 13, 2017

引入主题背景:angular 的指令配置中的template可以直接使用硬编码写相应的代码,不过也可以根据变量,进行动态更新。那么需要用到那些变量,因用法的不同,所以需要设置合适的绑定策略。

1:先说指令域scope的@

我觉得描述很费劲,直接用代码来阐述:

AngularJS.html

<!doctype html> 
<html ng-app='myApp'> 
 <head>  
 
 </head> 
 <body>  
 
 <div ng-controller="listCtrl">  
 <input type="text" ng-model="t" /> 
  <kid title="{{t}}" > //这个必须指定的,这里的title是指令里scope的@对应的,t就是控制域scope下的 
  <span>我的angularjs</span> 
 </kid> 
</div> 
<script type="text/javascript" src="angular.js"></script> 
<script type="text/javascript" src="main05.js"></script> 
</body></html>

main05.js

var myApp=angular.module('myApp',[]); 
myApp.controller('listCtrl',function($scope){ 
 $scope.logchore="motorola"; 
}); 
 
 
myApp.directive('kid',function(){ 
 return { 
  'restrict':'E', 
  scope:{ 
   title:"@" 
  }, 
  template:'<div >{{title}}</div>' 
   
 } 
});

在输入框输入数字会绑定到指令模板的title中。

2:再说说Scope的=

angularjs.html

<!doctype html> 
<html ng-app='myApp'> 
 <head>  
 
 </head> 
 <body>  
 
 <div ng-controller="listCtrl">  
 <input type="text" ng-model="t" /> 
  <kid title="t" > //和上面相比,这个直接赋值等于scope域下的t了 
  <p>{{title}}</p> 
  <span>我的angularjs</span> 
 </kid> 
</div> 
<script type="text/javascript" src="angular.js"></script> 
<script type="text/javascript" src="main05.js"></script> 
</body></html>

main05.js代码如下:

var myApp=angular.module('myApp',[]); 
myApp.controller('listCtrl',function($scope){ 
 $scope.logchore="motorola"; 
}); 
 
 
myApp.directive('kid',function(){ 
 return { 
  'restrict':'E', 
  scope:{ 
   title:"=" 
  }, 
  template:'<div >{{title}}</div>' 
   
 } 
});

3:最后说&,这个是用来方法调用的

angularjs.html代码如下:

<!doctype html> 
<html ng-app='myApp'> 
 <head>  
 
 </head> 
 <body>  
 
 <div ng-controller="listCtrl">  
  <kid flavor="logchore()" ></kid> //先比=,函数赋值的形式,而logchore函数必须是域scope下声明的函数 
</div> 
<script type="text/javascript" src="angular.js"></script> 
<script type="text/javascript" src="main05.js"></script> 
</body></html>

main05.js代码如下:

var myApp=angular.module('myApp',[]); 
myApp.controller('listCtrl',function($scope){ 
 $scope.logchore=function(){ 
  alert('ok'); 
 }; 
}); 
 
 
myApp.directive('kid',function(){ 
 return { 
  'restrict':'E', 
  scope:{ 
   flavor:"&" 
  }, 
  template:'<div ><button ng-click="flavor()"></button></div>' 
   
 } 
});

如果logchore带有参数,

angularjs.html代码如下:

<!doctype html> 
<html ng-app='myApp'> 
 <head>  
 
 </head> 
 <body>  
 
 <div ng-controller="listCtrl">  
 
  <kid flavor="logchore(t)" ></kid> 
 
</div> 
<script type="text/javascript" src="angular.js"></script> 
<script type="text/javascript" src="main05.js"></script> 
</body></html>

main05.js代码如下:

var myApp=angular.module('myApp',[]); 
myApp.controller('listCtrl',function($scope){ 
 $scope.logchore=function(x){ 
  alert(x); 
 }; 
}); 
 
 
myApp.directive('kid',function(){ 
 return { 
  'restrict':'E', 
  scope:{ 
   flavor:"&" 
  }, 
  template:'<div > <input type="text" ng-model="v" /> <button ng-click="flavor({t:v})"></button></div>' 
   
 } 
});

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

Javascript 相关文章推荐
IE本地存储userdata的一个bug说明
Jul 01 Javascript
js对象之JS入门之Array对象操作小结
Jan 09 Javascript
jquery 插件学习(二)
Aug 06 Javascript
百度地图API之本地搜索与范围搜索
Jul 30 Javascript
jquery遍历table的tr获取td的值实现方法
May 19 Javascript
js手机号批量滚动抽奖实现代码
Apr 17 Javascript
微信小程序实现自定义modal弹窗封装的方法
Jun 15 Javascript
js如何获取图片url的Blob值并预览示例代码
Mar 07 Javascript
开发Node CLI构建微信小程序脚手架的示例
Mar 27 Javascript
js String.prototype.trim字符去前后空格的扩展
Aug 23 Javascript
js实现简单选项卡制作
Aug 05 Javascript
实用的 vue tags 创建缓存导航的过程实现
Dec 03 Vue.js
从零开始学习Node.js系列教程六:EventEmitter发送和接收事件的方法示例
Apr 13 #Javascript
详解angularJs指令的3种绑定策略
Apr 13 #Javascript
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
Apr 13 #Javascript
Vue组件tree实现树形菜单
Apr 13 #Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
Apr 13 #Javascript
Angularjs 动态添加指令并绑定事件的方法
Apr 13 #Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
Apr 13 #Javascript
You might like
PHP 引用是个坏习惯
2010/03/12 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
js闭包实现按秒计数
2015/04/23 Javascript
JavaScript中的getTimezoneOffset()方法使用详解
2015/06/10 Javascript
Jquery ajax基础教程
2015/11/20 Javascript
详解Javascript获取缓存和清除缓存API
2017/05/25 Javascript
js判断文件类型大小并给出提示的实现方法
2018/01/03 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
js实现弹出框的拖拽效果实例代码详解
2019/04/16 Javascript
vue cli安装使用less的教程详解
2019/07/12 Javascript
Vue路由之JWT身份认证的实现方法
2019/08/26 Javascript
layui实现图片虚拟路径上传,预览和删除的例子
2019/09/25 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
2020/02/16 Javascript
详解JavaScript之ES5的继承
2020/07/08 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
[10:42]Team Liquid Vs Newbee
2018/06/07 DOTA
python获取从命令行输入数字的方法
2015/04/29 Python
python使用htmllib分析网页内容的方法
2015/05/08 Python
python使用paramiko实现远程拷贝文件的方法
2016/04/18 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
Python 中的 global 标识对变量作用域的影响
2019/08/12 Python
python中xlutils库用法浅析
2020/12/29 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
资生堂美国官网:Shiseido美国
2016/09/02 全球购物
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
临床医学专业毕业生的自我评价
2013/10/17 职场文书
《鱼游到了纸上》教学反思
2014/02/20 职场文书
群众路线对照检查剖析材料
2014/10/09 职场文书
爱护环境建议书
2015/09/14 职场文书
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python
关于Redis的主从复制及哨兵问题
2022/06/16 Redis