【问题标题】:Angular factory and moduleAngular 工厂和模块
【发布时间】:2018-01-24 14:43:05
【问题描述】:

我目前正在学习如何进行 MEAN Stack 编程,但遇到了一些我无法理解的代码。我试图在谷歌上搜索,但仍然不明白。

下面是代码:

angular.module('todoService', [])

.factory('Todos', ['$http',function($http) {
    return {
        get : function() {
            return $http.get('/api/todos');
        },
        create : function(todoData) {
            return $http.post('/api/todos', todoData);
        },
        delete : function(id) {
            return $http.delete('/api/todos/' + id);
        }
    }
}]);

谁能解释一下 .factory() 实际上在做什么?另外,参数 'Todos' 和 todoService 是干什么用的?代码来自这个source

【问题讨论】:

  • services/factories/providers (same thing) 位于与控制器不同的层上,并且可以在应用程序之间共享一些逻辑以方便使用(这样您就没有重复您的代码)。您可以将您的工厂注入控制器:function($scope,Todos){...} 并将其功能与var promise = Todos.get(); 一起使用
  • @AlekseySolovey,我终于可以理解工厂/服务如何以及为什么与控制器一起工作了。谢谢!

标签: angularjs node.js mongodb express mean-stack


【解决方案1】:

AngularJS Factory 是 AngularJS 模块中的提供者,它返回一组函数。

这个工厂可以在你的 AngularJS 控制器中注入,你可以通过注入依赖来在你的控制器中使用你工厂的方法。

angular.module('todoService').controller('YourController', ['$scope', 'Todos', function($scope, Todos) {
    $scope.somethingToStore = Todos.get();
}]);

正如 Aleksey 所说的$http 服务返回一个承诺,所以最好这样做:

Todos.get().then(function(response){
    $scope.somethingToStore = response.data;
}

解释你的代码的元素:

  • Todos 是您的工厂名称
  • todoService 是您的角度模块名称

【讨论】:

  • 注意 $http 返回一个承诺)更好:Todos.get().then((res)=>{$scope.somethingToStore=res.data;})
  • @AlekseySolovey 你是对的!以工厂使用为例。
  • @Zooly,谢谢你的解释!我还有一个问题想问。 'todoData' 和 'id' 来自哪里?
  • @ApplePie 你将它们作为参数传递:Todos.create(your_data), Todos.delete(your_id)
  • 它们是你的工厂函数的参数。想象一下使用:Todos.create(data)Todos.delete(14)。这就是使用工厂/服务的目的:你可以在不同的情况下重用参数化函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-01
  • 2019-12-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 2020-07-14
  • 1970-01-01
相关资源
最近更新 更多