[英]AngularJS Directive or Service?
我目前對AngularJS的理解告訴我, 指令僅應包含DOM操縱和服務,所有與邏輯和數據處理有關的事情。
就我而言,我不確定該使用哪個。 我得到了一個包含三個功能的對象:
// 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。 即使創建和刪除Elements,也必須將其應用於elem.insertBefore( createElem("<div></div>") );
在控制器中。 openGate();
函數只是更改位置,而與DOM絕對無關。
拒絕服務的原因
我並沒有真正處理任何數據。 在createElem();
我創建了一個documentFragment
,它是一個沒有父節點的Node。 因此,如果我調用該函數,則在將其插入DOM之前,不會在DOM內部發生任何事情。
也許我應該將它們分為指令和服務 ? 否則,它們將始終停留在相同的上下文中。
將功能拆分為指令和服務是正確的。
服務不僅用於邏輯處理。 服務的主要目的是包含打算在站點的其他部分之間共享的信息,例如控制器和指令。 因此,您可以這樣考慮:
我要操縱DOM嗎? 使用指令。
我要在網站的各個組成部分之間共享此信息嗎? 使用服務(即服務,工廠或提供者)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.