详解angularjs中如何实现控制器和指令之间交互
发布时间 - 2026-01-11 01:33:58 点击率:次如果我们具有下面的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实现自定义指令与控制器数据交互的方法示例
# 加载
# 都是
# 第二个
# 并在
# 这时候
# 自定义
# 分别为
# 转换成
# 就可以
# 有一
# 就会
# 第一个
# 这就是
# 这两个
# 会为
# 大家多多
# 复用
# 器中
# 使用了
# 有两个
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
Laravel如何使用withoutEvents方法临时禁用模型事件
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Laravel API资源类怎么用_Laravel API Resource数据转换
Laravel中的withCount方法怎么高效统计关联模型数量
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
QQ浏览器网页版登录入口 个人中心在线进入
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
如何快速上传建站程序避免常见错误?
IOS倒计时设置UIButton标题title的抖动问题
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理
EditPlus 正则表达式 实战(3)
javascript中闭包概念与用法深入理解
千库网官网入口推荐 千库网设计创意平台入口
网站建设保证美观性,需要考虑的几点问题!
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
如何用搬瓦工VPS快速搭建个人网站?
如何在Windows服务器上快速搭建网站?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
EditPlus中的正则表达式 实战(2)
WordPress 子目录安装中正确处理脚本路径的完整指南
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
如何在新浪SAE免费搭建个人博客?
Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解
如何构建满足综合性能需求的优质建站方案?
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
Laravel如何使用Blade模板引擎?(完整语法和示例)
Laravel Docker环境搭建教程_Laravel Sail使用指南
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
大型企业网站制作流程,做网站需要注册公司吗?
谷歌Google入口永久地址_Google搜索引擎官网首页永久入口
如何在建站之星绑定自定义域名?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
深圳网站制作的公司有哪些,dido官方网站?
JS碰撞运动实现方法详解
Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】
长沙企业网站制作哪家好,长沙水业集团官方网站?
Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践
如何基于云服务器快速搭建网站及云盘系统?
如何自定义建站之星模板颜色并下载新样式?
如何在VPS电脑上快速搭建网站?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
如何在阿里云虚拟服务器快速搭建网站?
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
个人摄影网站制作流程,摄影爱好者都去什么网站?

