AngularJS指令或服务?

时间:2014-06-18 19:17:38

标签: javascript angularjs angularjs-directive angularjs-service angularjs-controller

我目前对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内部不会发生任何事情。


也许我应该将它们分成指令服务?否则他们将始终保持相同的背景。

1 个答案:

答案 0 :(得分:1)

将功能拆分为指令和服务是正确的。

服务不只是用于逻辑处理。服务的主要目的是包含旨在与站点的其他部分共享的信息,例如控制器和指令。所以你可以这样思考:

我会操纵DOM吗?使用指令。

我是否会在我网站的各个组件中分享这些信息?使用服务(即服务,工厂或提供商)。