Angularjs - 创建`factory`以及如何使用它们的正确方法是什么?

时间:2016-07-20 07:45:13

标签: angularjs

我对角度很新,我想了解工厂方法。

我尝试以不同的方式为我的应用创建工厂方法。但没有什么对我有用 - 为什么?

这也是创建工厂方法的正确方法,我们有多种方法来创建工厂方法吗? - 如果是这样,请说明他们的优点和缺点?

这是我的尝试:

POST /upload/drive/v2/files?uploadType=multipart&access_token=ya29.CjAmA2j6eonCiROaNum-V1cWdFVH2vXpNiXAsXK6iLPu7K54tD4uNsmH-eEycMcnaBE HTTP/1.1
Host: www.googleapis.com
Accept: */*
Content-Type: multipart/related; boundary="foo_bar_baz"
Content-Length: 150

Live Demo

4 个答案:

答案 0 :(得分:2)

以下是你的掠夺者的a forked version

  
      
  • 你的工厂必须退货。查看plunker中的return语句
  •   
  • 您应该在控制器MainCtrl中注入工厂,以便初始化工厂。这就是console.log未被打印的原因。
  •   

工厂/服务的最佳使用

  

根据下面广泛使用的John Papa's angular 1 style guide是最佳方法。在style guide

上阅读有关角度指南的更多信息
(function() {
'use strict';

angular
    .module('app')
    .factory('logger', logger);

function logger() { }
})();

答案 1 :(得分:1)

使用工厂,您可以创建对象。一个可以帮助您入门的简单示例是:

angular
.module('myApp', [])
.factory('Post', ['$http', function($http) {
    var service = {
        all: all,
        get: get
    };

    return service;

    function all() {
        return $http
            .get('api/posts/')
            .then(function(response){
                return response.data;
            });
        }
    }

    function get(id) {
        return $http
            .get('api/posts/' + id);
            .then(function(response){
                return response.data;
            });
        }
    }
}])
.controller('PostsController', ['Post', function(Post){
    var self = this;
    self.posts = Posts.get();
}]);

所以检查我可以简单地将它注入我的控制器,然后轻松调用它的方法。这样就会出现问题分离,您可以将所有这些逻辑与控制器和组件保持一致。有一篇关于工厂和服务的文章也很here

答案 2 :(得分:0)

答案 3 :(得分:0)

工厂用于创建服务。服务是java脚本函数一旦我们定义了工厂,我们就可以在应用程序的任何地方使用它。 示例:

<div ng-app="myApp" ng-controller="Ctrl">
<h3>{{hello}}</h3>
</div>
<script>
var app = angular.module('myApp', []);
app.factory("test",function(){
    var fact={}     //Creating Object
    fact.love=function(){   //Access love method through the fact object
        var serve="This is test for  factory";
        return serve;
    }
    return fact;          //return object
})
app.controller('Ctrl', function($scope, test) {
    $scope.hello=test.love(); //assign the test factory function in ctrler
});
</script>