全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解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中调用了!

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

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


# angularjs  # 指令控制器  # angular指令和控制器  # angular  # 指令交互  # 深入讲解AngularJS中的自定义指令的使用  # 详解AngularJS中自定义指令的使用  # AngularJS创建自定义指令的方法详解  # AngularJS使用自定义指令替代ng-repeat的方法  # Angularjs自定义指令实现三级联动 选择地理位置  # Angularjs使用directive自定义指令实现attribute继承的方法详解  # angularjs 表单密码验证自定义指令实现代码  # AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法  # AngularJS自定义指令实现面包屑功能完整实例  # AngularJS自定义指令之复制指令实现方法  # AngularJS指令与控制器之间的交互功能示例  # AngularJS实现自定义指令与控制器数据交互的方法示例  # 加载  # 都是  # 第二个  # 并在  # 这时候  # 自定义  # 分别为  # 转换成  # 就可以  # 有一  # 就会  # 第一个  # 这就是  # 这两个  # 会为  # 大家多多  # 复用  # 器中  # 使用了  # 有两个 


相关文章: C#如何在一个XML文件中查找并替换文本内容  内部网站制作流程,如何建立公司内部网站?  制作网站外包平台,自动化接单网站有哪些?  ,交易猫的商品怎么发布到网站上去?  如何高效利用亚马逊云主机搭建企业网站?  如何在云服务器上快速搭建个人网站?  如何选择CMS系统实现快速建站与SEO优化?  制作网站怎么制作,*游戏网站怎么搭建?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  杭州银行网站设计制作流程,杭州银行怎么开通认证方式?  西安大型网站制作公司,西安招聘网站最好的是哪个?  免费ppt制作网站,有没有值得推荐的免费PPT网站?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何通过万网虚拟主机快速搭建网站?  头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?  香港服务器如何优化才能显著提升网站加载速度?  英语简历制作免费网站推荐,如何将简历翻译成英文?  网站制作报价单模板图片,小松挖机官方网站报价?  如何快速搭建支持数据库操作的智能建站平台?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  专业公司网站制作公司,用什么语言做企业网站比较好?  制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  建站之星备案是否影响网站上线时间?  制作宣传网站的软件,小红书可以宣传网站吗?  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  建站之星展会模板:智能建站与自助搭建高效解决方案  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  如何在阿里云完成域名注册与建站?  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  高端建站如何打造兼具美学与转化的品牌官网?  如何快速生成可下载的建站源码工具?  C++中引用和指针有什么区别?(代码说明)  深入理解Android中的xmlns:tools属性  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  建站主机空间推荐 高性价比配置与快速部署方案解析  建站之星如何快速更换网站模板?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  金*站制作公司有哪些,金华教育集团官网?  如何用虚拟主机快速搭建网站?详细步骤解析  如何用wdcp快速搭建高效网站?  建站主机CVM配置优化、SEO策略与性能提升指南  如何做网站制作流程,*游戏网站怎么搭建? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。