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 相关文章推荐
Javascript优化技巧(文件瘦身篇)
Jan 28 Javascript
jQuery判断元素是否是隐藏的代码
Apr 24 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
Jan 08 Javascript
intro.js 页面引导简单用法 分享
Aug 06 Javascript
CSS3,HTML5和jQuery搜索框集锦
Dec 02 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
Jan 12 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
Jun 20 Javascript
javascript中异常处理案例(推荐)
Oct 03 Javascript
浅谈vuepress 踩坑记
Apr 18 Javascript
node+koa2+mysql+bootstrap搭建一个前端论坛
May 06 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
Jun 18 Javascript
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 Javascript
从零开始学习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 图像处理类1
2009/06/15 PHP
php恢复数组的key为数字序列的方法
2015/04/28 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
vue解决弹出蒙层滑动穿透问题的方法
2018/09/22 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
对于Python异常处理慎用“except:pass”建议
2015/04/02 Python
python脚本作为Windows服务启动代码详解
2018/02/11 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
python实现字符串加密成纯数字
2019/03/19 Python
浅析python redis的连接及相关操作
2019/11/07 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
Nordgreen英国官网:斯堪的纳维亚设计师手表
2018/10/24 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
数据库方面面试题
2012/04/22 面试题
房地产出纳岗位职责
2013/12/01 职场文书
4s客服专员岗位职责
2013/12/01 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
2014年度工作总结报告
2014/12/15 职场文书
新郎新娘答谢词
2015/01/04 职场文书
廉政承诺书范文
2015/04/28 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS