Javascript AngularJS指令还是服务?
我目前对AngularJS的理解告诉我,指令应该只包含DOM操作和服务所有与逻辑和数据处理相关的内容 就我而言,我不确定该用哪个。我得到了一个包含三个函数的对象:Javascript AngularJS指令还是服务?,javascript,angularjs,angularjs-directive,angularjs-service,angularjs-controller,Javascript,Angularjs,Angularjs Directive,Angularjs Service,Angularjs Controller,我目前对AngularJS的理解告诉我,指令应该只包含DOM操作和服务所有与逻辑和数据处理相关的内容 就我而言,我不确定该用哪个。我得到了一个包含三个函数的对象: // Creates a documentFragment & normal element. // Returns the fragment. createElem: function(htmlStr) { var frag = document.createDocumentFragment(), temp
// 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。即使我创建和删除元素,也必须在其他地方应用,比如elem.insertBefore(createElem(“”)控制器中的代码>。openGate()代码>函数只是更改位置,与DOM完全无关
反对服务的理由
我没有真正处理任何数据。在createElem()中
我创建了一个documentFragment
,它是一个没有父节点的节点。因此,如果我调用该函数,在我将其插入某个位置之前,DOM内部不会发生任何事情
也许我应该把它们分成指令和服务?否则,它们将始终处于相同的上下文中 将函数拆分为指令和服务是正确的
服务不仅仅用于逻辑处理。服务的主要目的是包含要在站点的其他部分(如控制器和指令)之间共享的信息。所以你可以这样想:
我要操纵DOM吗?使用指令
我是否打算在我的网站的各个组件之间共享这些信息?使用服务(即服务、工厂或提供商) 谢谢,这让我头脑清醒了。但是openGate()呢代码>?它不通过应用程序共享信息,也不操纵DOM。如果您不想在多个位置使用该函数,请将其放在控制器中。如果这为您提供了答案,请将答案标记为正确!谢谢