方法影响范围元素时的角度服务设计

时间:2015-08-18 03:54:42

标签: javascript angularjs angular-services

我有这个jsfiddle,基本上是两个按钮应用程序。当你点击第一个它在我的角度控制器(load())中执行一个方法时,我试图创建服务来重用逻辑,组织更多代码并实际尝试遵循最佳实践。

首先请告诉我,如果我正确的话。

  1. 控制器是传达模型变化的部分,是我的视图或演示文稿与应用程序背后的逻辑之间的交互。

  2. 服务更多是用于创建在应用程序中运行的进程,在REST透视图中,这将负责调用REST api,如果计算适用,则这是它们应该驻留的位置。

  3. 我的问题是,当http调用的回调函数移动范围内的元素并用于在UI中执行操作时,我该怎么做?

    将$ scope移动到我的服务层是正确的吗?我认为不正确有几个原因。

    举一个真实的例子,将load()方法逻辑移到loadFromService方法中的最佳方法是什么,我如何发回我需要更新的信息UI,在这种情况下是[source]和[invalid] vars。

    基于小提琴,我想用" service" 值和 invalid = true 更新源变量,当我使用{{1 }}

    这样做的正确方法是什么。只是为了澄清,如果我点击执行控制器方法的第一个按钮或者如果我点击调用服务的第二个按钮,我想要相同的结果,正确的实现是什么

    更新:如果我在REST调用之前和之后有一系列条件或规则,最好的方法是什么,我的意思是服务方法不仅执行REST调用(做一些逻辑来设置输入params,并做出回应的事情)

1 个答案:

答案 0 :(得分:1)

这样做的正确方法是返回一个承诺。

你可以在这篇文章中阅读更多相关信息: Processing $http response in service

所以我会实现这样的事情:

myApp.service('myService', [ '$http', function($http) {
    this.loadFromService = function() {
        $http.get('http://localhost:8080/person').then( function(res) {
            return res.data;
        });
    };
}]);

在控制器中你可以:

myApp.controller('myController', ['myService', function(myService) {
    $scope.load = function() {
        myService.loadFromService().then(function(data) {
            $scope.data2 = data;
        });
    };
}]);