多个控制器在一个Angular指令中操作内容
Multiple controllers manipulating content in an Angular directive?
我遇到了一个以前没有遇到过的问题,我完全不知道如何解决它。
我有一个容器,用于在各种视图中显示成功和错误消息。这个容器是由Angular指令定义的。
问题是,我想有一个服务或类似的东西,我可以注入到我的控制器。然后,我可以使用该服务上的方法来显示"警告框"和/或更改内容。
我如何在Angular中实现这个或类似的DRY设置?
三个完美的方法:
-
使用angular的事件系统,
rootScope.$broadcast
或scope.$emit
和scope.$on
作为监听器,参见这里的文档:https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$broadcasthttps://docs.angularjs.org/api/ng/type/rootScope.Scope #美元发出https://docs.angularjs.org/api/ng/type/rootScope.Scope #美元在 -
将服务注入到"alert box"指令中,让它以某种方式在服务中注册自己,这样服务就知道它的存在,可以直接控制指令的控制器,或者它的作用域,或者元素,或者你想用的任何逻辑。
-
使用具有编排逻辑的容器作为父容器。子指令可以要求容器控制器,并调用容器上的函数等,然后一个子指令可以通过这个协调父容器触发另一个子指令。
编辑:我的目的不是向您展示如何以最通用和最干净的方式实现它,因为我不知道您的确切情况,您应该始终考虑您希望您的功能具有多通用和多抽象。这是一个非常非常简单的例子,它展示的不是找到一些复杂的系统或模式,而是找到一些适合你的东西
方法二示例:angular.module('myApp').service( 'myService', myService );
function myService(){
this.alertBoxes = {};
this.registerAlertBox = function(name, handle){
this.alertBoxes[ name ] = handle;
}
this.toggleAlertBox = function(byName){
this.alertBoxes[ byName ]();
}
}
我个人会使用method3从什么样的功能你正在寻找的外观,方法2可以是一个通用的公共订阅服务使用rootScope。$broadcast和scope。$on,或者干脆不用这些,直接把它们放到pubsub上去
方法1确实是最简单的方法,但显然将受益于抽象为服务,在每次需要非常具体的publicsub事件时注入服务。
发布/订阅模式的示例:发布/订阅设计模式angularjs service
- AngularJS操作父'指令中的DOM
- 我应该只在指令的链接 fn 中进行 DOM 操作吗?
- AngularJs 在指令中操作来自服务响应的数据
- 通过指令属性传达操作
- 使用 angularjs 指令操作范围值
- 表单操作无法正常工作.它不会移动到指令链接,即<表单 action=“”>
- 角度指令 DOM 操作行为
- 更新指令中的attrs值 - 如何在AngularJS中执行此操作
- 处理开机自检后从 Angular 控制器到指令的成功/错误 DOM 操作
- 如何在不使用指令的情况下操作ng-if内部的元素
- 如何在某个操作后刷新AngularJS指令
- angularjs指令来操作文本值
- 由于子指令引发的事件,正在操作父指令的DOM
- Angularjs-当dom操作被分配给按钮点击时,它是有效的,在指令中它是不完整的
- 告诉子指令在父指令完成DOM操作之后执行操作
- 一个指令用于多个DOM操作
- Angularjs指令慢dom操作
- 多个控制器在一个Angular指令中操作内容
- 监视{{values}}上的变化以触发DOM的指令操作
- 无法在指令链接中操作继承的作用域(konami代码指令实现)