习语AngularJS模态
Idiomatic AngularJS modal
我正在掌握AngularJS,在我的斗争中,我读到$broadcast/$emit被过度使用。过去曾使用过Backbone,该服务似乎是pubSub的自然替代品,后者是Angular之外解耦组件的标准goto。
在这个例子中,我想呈现一个模式覆盖来响应网络事件和用户输入。假设我有这个:
angular
.module("app.controllers")
.controller("ModalCtrl", function ($scope, $rootScope) {
// or a directive?
$scope.modal = {
title: "",
visibility: ""
};
});
包装:
<div data-ng-controller="ModalCtrl" class="modal {{visibility}}">
<h2 data-ng-bind="modal.title"></h2>
</div>
我应该如何改变这个组件与另一个组件的可见性,即:
angular
.module("app.controllers")
.controller("MyCtrl", function ($scope, $rootScope, ModalCtrl) {
$scope.handleClick = function () {
// this:
$rootScope.$broadcast("modal", {
title: "ClickHandler",
visibility: "is-visible"
});
// or this? modify scope directly
$rootScope.modal = {
title: "ClickHandler",
visibility: "is-visible"
};
// or this? - assuming I can pass it in as a dependency
ModalCtrl.show({title: "ClickHandler});
};
});
在MVW Angular的模式中,找到一种使单独的控制器进行通信的方法是不好的做法。您可以制作一个中介服务,该服务可以注入ModalCtrl以及任何其他控制器中。
例如,让我们介绍ModalService
:
// Services
angular
.module("app.services")
.factory("ModalService", function () {
var ModalService = {
modal: {
title: "",
visibility: ""
}
};
return ModalService;
});
// Controllers, depending on services
angular
.module("app.controllers", ["app.services"])
.controller("ModalCtrl", function ($scope, ModalService) {
$scope.modal = ModalService.modal;
});
.controller("MyCtrl", function ($scope, ModalService) {
$scope.handleClick = function () {
ModalService.modal.title = "ClickHandler";
ModalService.modal.visibility = "is-visible";
};
});
这是一个简单的例子。请注意,服务公开函数比直接公开结构要好。它确实暴露了一个结构,以便清楚地解释我的观点。
相关文章:
- 打开一个模态并将其链接到AngularJS中的指令
- 如何通过所选索引(AngularJS)在模态弹出窗口中显示数据
- 点击AngularJS模态窗口捕捉背景事件
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- Angularjs - 观察模态窗口从另一个控制器关闭
- 通过AngularJS中的模态编辑对象-使用临时对象
- angularJS,一个部分或模态通知,加载几秒钟后就会消失
- 使用角度模态服务(AngularJS)自定义模态
- 如何在angularjs-ui-bootstrap中使用模态弹出窗口
- angularjs模态将数据传输到外部控制器的正确方法
- angularjs ng repeat不会在模态框中循环
- AngularJS bootstrap.ui模态未显示
- 如何在AngularJS点击事件中将数据传递到模态中
- AngularJS:将变量传递给模态
- 无法再次获得 Popup 的模态 - AngularJS
- 如何使用 AngularJS 进行模态
- 从模态 AngularJS 获取数据
- AngularJS ng-click:如何将行数据传递到模态弹出文本框
- AngularJS 引导模态结果而不关闭
- 创建一个模态窗口以使用 AngularJS 加载数据