簡體   English   中英

AngularJS指令還是服務?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM