滑动加载 同时我们的控制器具有如下的签名:var myModule = angular.module("MyModule", []); //首先定义一个模块并在模块下挂载控制器,第二个参数为一个数组,其中函数前面的参数都是会被注入到函数形参上面的 myModule." />
当前位置:首页 > 日记 > 正文

详解angularjs中如何实现控制器和指令之间交互

详解angularjs中如何实现控制器和指令之间交互

如果我们具有下面的DOM结构:

  <div ng-controller="MyCtrl">    <loader>滑动加载</loader> </div> 

同时我们的控制器具有如下的签名:

var myModule = angular.module("MyModule", []); //首先定义一个模块并在模块下挂载控制器,第二个参数为一个数组,其中函数前面的参数都是会被注入到函数形参上面的 myModule.controller('MyCtrl', ['$scope', function($scope){   $scope.loadData=function(){     console.log("加载数据中...");   } }]); 

同时指令的签名如下:

myModule.directive("loader", function() {   return {     restrict:"AE",//Element,Attribute     link:function(scope,element,attrs){       element.bind('mouseenter', function(event) {         //scope.loadData();         // scope.$apply("loadData()");         // 注意这里的坑,howToLoad会被转换成小写的howtoload       });     }   }  }); 

这时候我们的指令通过scope.loadData或者scope.$apply就可以完成对控制器的调用了。但是如果我们具有两个控制器呢?而且两个控制器中$scope中方法是不同的?

var myModule = angular.module("MyModule", []); //首先定义一个模块并在模块下挂载控制器,第二个参数为一个数组,其中函数前面的参数都是会被注入到函数形参上面的 myModule.controller('MyCtrl', ['$scope', function($scope){   $scope.loadData=function(){     console.log("加载数据中...");   } }]); myModule.controller('MyCtrl2', ['$scope', function($scope){   $scope.loadData2=function(){     console.log("加载数据中...22222");   } }]); 

这时候在我们的指令中如何调用方法呢,按照上面的方式的话那么那么就会面临问题:MyCtrl2没有我们的loadData,而只有loadData2!这时候我们就需要使用后面的指令自定义属性了!

我们定义了两个controller控制器,分别为MyCtrl,MyCtrl2,这两个控制器都使用了我们自己定义的指令load:

<!doctype html> <html ng-app="MyModule">   <head>     <meta charset="utf-8">   </head>   <body>   <!--第一个控制器MyCtrl-->     <div ng-controller="MyCtrl">       <loader howToLoad="loadData()">滑动加载</loader>     </div>     <!--第二个控制器MyCtrl2-->     <div ng-controller="MyCtrl2">       <loader howToLoad="loadData2()">滑动加载</loader>     </div>   </body>   <script src="framework/angular-1.3.0.14/angular.js"></script>   <script src="Directive&Controller.js"></script> </html> 

我们自定义了Controller代码如下:

var myModule = angular.module("MyModule", []); //首先定义一个模块并在模块下挂载控制器,第二个参数为一个数组,其中函数前面的参数都是会被注入到函数形参上面的 myModule.controller('MyCtrl', ['$scope', function($scope){   $scope.loadData=function(){     console.log("加载数据中...");   } }]); myModule.controller('MyCtrl2', ['$scope', function($scope){   $scope.loadData2=function(){     console.log("加载数据中...22222");   } }]); //在模块下挂载一个loader指令 myModule.directive("loader", function() {   return {     restrict:"AE",//Element,Attribute     link:function(scope,element,attrs){       element.bind('mouseenter', function(event) {         //scope.loadData();         // scope.$apply("loadData()");         // 注意这里的坑,howToLoad会被转换成小写的howtoload         // scope.$apply(attrs.howtoload);         //其中scope为POJO,但是有一系列的工具方法如$watch,$apply等       });     }   }  }); 

很显然这里有两个控制器,分别为MyCtrl和MyCtrl2,我们的指令如何知道调用那一个Controller?这时候我们就需要为我们的指令指定不同的属性,用这个属性来判断不同的controller调用,这样我们的指令就可以在不同的controller中调用了!

总结:之所以定义指令就是为了复用,为了让指令和不同的控制器进行交互就会为指令定义不同的配置项,这就是指令和控制器进行数据交互的原理之所在!

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

相关文章

微信小程序 本地数据读取实例

微信小程序 本地数据读取实例

数据读取,实例,程序,电脑软件,微信小,微信小程序 本地数据读取实例一般情况下,小程序的utils这个文件夹下,我们可以把本地的数据写进去,封装成.js文件,提供对外暴露的接口,然后读取本地数据。如果涉及到一些针对这些数据的处理方法,也可以把方法…

ps怎么制作一个小李子的暗蓝色的个

ps怎么制作一个小李子的暗蓝色的个

李子,海报,蓝色,电脑软件,ps,我们看电影,都会看到很多海报,那些海报那么酷,那么帅,大部分是用PS调色出来的,下面来说说,PS6中怎么将一张图片P出海报效果。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、首…

在Photoshop中如何创建图层蒙版呢?

在Photoshop中如何创建图层蒙版呢?

图层,电脑软件,Photoshop,蒙版呢,ps中蒙板工具可以让我们在不破坏素材的情况下完成对图层中图像的遮盖,而且还可以任意的再次进行修改,下面为大家介绍在Photoshop中如何创建图层蒙版方法,来体验一下吧。在Photoshop中如何创建图层蒙版第一步:若…

word2007如何借助查找和替换校正错

word2007如何借助查找和替换校正错

查找,替换,错别字,电脑软件,  在编写Word文档时,文字出现了很多错误字,如果一个一个去改,既麻烦又浪费时间,这时我们可以通过&ldquo;查找替换&rdquo;功能来纠正文中的错别字。那么下面就由小编给大家分享下word2007中借助查找和替换功能校正…

Laravel网站打开速度优化的方法汇

Laravel网站打开速度优化的方法汇

优化,方法,网站,速度,电脑软件,前言Laravel是一个功能强大的框架,组件很多,代码也很庞大,它的易用方便是牺牲了性能的,即便如此它仍然是一个优秀的框架,但在正式环境下要做好优化提升网站的打开速度。下面这篇文章主要给大家介绍了关于Laravel网…

PS鼠绘拟物化渐变金色复古唱片教程

PS鼠绘拟物化渐变金色复古唱片教程

教程,渐变,金色,唱片,电脑软件,效果图:主要过程:12 3 阅读全文1 23 阅读全文教程结束,以上就是PS鼠绘拟物化渐变金色复古唱片教程的全部内容,希望大家喜欢!相关教程推荐:PS简单快速绘制超精致的金属拉丝黑胶唱片教程全球著名唱片公司标志PS利用…

excel2003制作甘特图的方法图解步

excel2003制作甘特图的方法图解步

甘特图,方法,步骤,电脑软件,strong,  Excel的甘特图是图表常用的一种,Excel应用画甘特图也是非常方便简洁,具体该如何制作甘特图呢?本文介绍一下应用Excel快速画出甘特图的方法,希望阅读过后对你有所启发!excel2003制作甘特图的方法制作甘特…

Visual Studio 2017无法加载Visual

Visual Studio 2017无法加载Visual

解决方法,无法加载,电脑软件,Studio,Visual,前几天安装了最新的Visual Studio 2017企业版,发现无法打开之前使用Visual Studio 2015创建的SharePoint 2016解决方案,提示“需要更新”。解决方法如下:右键-编辑.csproj,把MinimumOfficeToolsVersi…

适用于PPT设计的史诗级平面设计技

适用于PPT设计的史诗级平面设计技

平面设计,适用于,史诗,技巧,有哪些,  不论你是要为自己的微博做个有趣的图片,还是为自己的活动做PPT和邀请函,专业的平面设计的技巧总能给你的设计极大的帮助。以下是小编为您带来的关于适用于PPT设计的史诗级平面设计技巧,希望对您有所帮助…

HTTP 500 - 内部服务器错误

HTTP 500 - 内部服务器错误

错误,服务器,电脑软件,HTTP,IWAM账号不同步 症状举例: HTTP 500 - 内部服务器错误 原因分析: IWAM账号是安装IIS时系统自动建立的一个内置账号。IWAM账号建立后被Active Directory、IIS metabase数据库和COM+应用程序三方共同使用,账…

AI蒙版剪辑图形怎么去掉隐藏的外框

AI蒙版剪辑图形怎么去掉隐藏的外框

图形,剪辑,电脑软件,AI,AI中蒙版剪辑后,隐藏的外框如何去掉? 这里既然是蒙版的话,隐藏的图形如果去掉的话就不能产生蒙版的效果了。如果楼上亲只是想通过2个形状得到一个新的形状,这里可以介绍其他方法给楼主使用哈。软件名称:Adobe Illustrato…

Javascript的this用法

Javascript的this用法

电脑软件,Javascript,this是Javascript语言的一个关键字。它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如,function test(){    this.x = 1;  }随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就…