我在隐藏元素方面遇到了一些麻烦。我正在尝试使用AngularJS服务隐藏此元素。我的代码如下:

app.service('testService', function(){
    var testElement = $("#testElement");

    this.hideElement = function(){
        testElement.hide();
    }
});


上面的代码实际上并未隐藏该元素,但是以下代码可以:

app.service('testService', function(){
    this.hideElement = function(){
        var testElement = $("#testElement");
        testElement.hide();
    }
});


但是,我有多个使用testElement的函数,但我讨厌不得不在服务中需要testElement的所有函数中不断声明它。我在这里做错什么了吗?

最佳答案

我在这里做错什么了吗?


是。实际上,您的第一步是错误的。我的意思是拥有可以进行DOM操作的服务,在您的情况下,它可以隐藏HTML节点。服务是数据操纵层(检索,转换,保存,发布等),但绝不是表示层,它不应该关心View。服务是应用程序代码的可重用部分,这意味着应该将其注入应用程序的不同位置以提供到数据源的桥梁,它不应进行任何视图转换,而不仅仅是它们的用途。

为此,您应使用指令(以控制器为中介)来决定隐藏和显示的时间和内容。使用内置的ngShow / ngHide指令,并在控制器中设置了一些布尔标志,就足够了。

07-24 16:23