Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS指令还是服务?_Javascript_Angularjs_Angularjs Directive_Angularjs Service_Angularjs Controller - Fatal编程技术网

Javascript AngularJS指令还是服务?

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

我目前对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。即使我创建和删除元素,也必须在其他地方应用,比如
elem.insertBefore(createElem(“”)
openGate()函数只是更改位置,与DOM完全无关

反对服务的理由

我没有真正处理任何数据。在
createElem()中
我创建了一个
documentFragment
,它是一个没有父节点的节点。因此,如果我调用该函数,在我将其插入某个位置之前,DOM内部不会发生任何事情



也许我应该把它们分成指令和服务?否则,它们将始终处于相同的上下文中

将函数拆分为指令和服务是正确的

服务不仅仅用于逻辑处理。服务的主要目的是包含要在站点的其他部分(如控制器和指令)之间共享的信息。所以你可以这样想:

我要操纵DOM吗?使用指令


我是否打算在我的网站的各个组件之间共享这些信息?使用服务(即服务、工厂或提供商)

谢谢,这让我头脑清醒了。但是
openGate()呢?它不通过应用程序共享信息,也不操纵DOM。如果您不想在多个位置使用该函数,请将其放在控制器中。如果这为您提供了答案,请将答案标记为正确!谢谢