【发布时间】:2014-06-23 18:25:17
【问题描述】:
我正在尝试将 Web 应用程序从纯 jQuery 移植到 AngularJS,我遇到了一个小部件,该小部件用于显示整个 Web 应用程序过程的进度。该小部件只是一个弹出窗口<div>,后面有一个部分透明的覆盖层,用于“暗淡”背景网页。现在整个网络都在使用这个效果,我想把这个小部件转换成某种 Angular 指令或某种类型的服务。
我想知道这种功能是否最好使用指令或服务来实现?
现在,小部件正在使用此模块模式对象从 DOM 中插入和删除。
WEBSITE.utils.overlay = function ($) {
var _cover;
$(document).ready(function () {
_cover = $(document.createElement('div')).attr('id', 'cover').prependTo($('body'));
});
return {
show: function () {
$(_cover).addClass('show');
$('html,body').bind('mousewheel DOMMouseScroll', function (event) {
event.preventDefault();
});
return _cover;
},
destroy: function () {
$('html,body').unbind('mousewheel DOMMouseScroll');
$(_cover).removeClass('show');
}
}
} (jQuery);
如您所见,小部件相当简单,我想让它可用,以便小部件中的 HTML 也可以轻松修改。我想到的最简单的方法可能是创建一个全局指令,例如:
<progressbar>Here is some text that I want displayed</progressbar>
那么创建指令并仅修改控制器中的文本是获得此功能的最佳方式吗?还是我应该使用服务之类的东西来获取它?
【问题讨论】:
-
指令绝对是处理 DOM 操作的方法 - 你很可能还希望它可以从控制器调用(进行数据调用 = 开始进度,完成 = 结束进度) - 我使用
scope方法说指令,使其可从控制器调用 -
好的,谢谢,我会试试看,至少能得到什么
-
您可能还想查看提供程序 - 这样您就可以将其注入需要它的控制器中,然后像这样调用它
-
我不确定这是不是最好的方法,但我通常同时使用指令和服务。我调用服务的方法之一,传递必要的参数,它使用指令来显示小部件。 (它比听起来更复杂,特别是因为您想与小部件交互并更改它的状态,但一旦完成,它是一个非常有用且高度可重用的功能。)
标签: angularjs