我目前对AngularJS的理解告诉我,指令应该只包含 DOM操作和服务与逻辑有关的一切和数据处理。
在我的情况下,我不确定使用哪个。我有一个包含三个函数的Object:
// Creates a documentFragment & normal element.
// Returns the fragment.
createElem: function(htmlStr) {
var frag = document.createDocumentFragment(),
temp = document.createElement("div");
temp.innerHTML = htmlStr;
while (temp.firstChild) {
frag.appendChild(temp.firstChild);
}
return frag;
},
// Removes all created childNodes.
deleteElem: function(htmlStr) {
while (htmlStr.firstChild) {
htmlStr.removeChild(htmlStr.firstChild);
}
},
// Redirects to page.
openGate: function(keyStr) {
var open = function() {
$location.path("/" + keyStr).replace();
$rootScope.$apply();
};
setTimeout(open, 500);
}
我希望通过我的AngularJS应用程序访问所有这些内容。
但我不确定我是否应将此作为服务或指令。
指令的理由
所有这些(好的,可能是三分之二)都不是直接操纵或更改DOM。即使我创建和删除元素,也必须在Controller中的其他地方应用elem.insertBefore( createElem("<div></div>") );
。 openGate();
函数只是更改位置,与DOM完全无关。
服务原因
我并没有真正处理任何数据。在createElem();
中,我创建了一个documentFragment
,它是一个没有父节点的节点。因此,如果我调用该函数,在我将其插入某个地方之前,我的DOM内部不会发生任何事情。
也许我应该将它们分成指令和服务?否则他们将始终保持相同的背景。
答案 0 :(得分:1)
将功能拆分为指令和服务是正确的。
服务不只是用于逻辑处理。服务的主要目的是包含旨在与站点的其他部分共享的信息,例如控制器和指令。所以你可以这样思考:
我会操纵DOM吗?使用指令。
我是否会在我网站的各个组件中分享这些信息?使用服务(即服务,工厂或提供商)。