为什么在AngularJS中使用.factory而不是声明为变量?

时间:2014-07-21 12:50:05

标签: javascript angularjs firebase factory angularfire

目前正在学习Javascript和Angular JS。我试图看看我是否可以绕过不使用.factory,只是声明它返回的变量然后引用它。

为什么我必须使用工厂而不是仅仅声明它作为函数返回的内容?无论如何都要绕过它。

JAVASCRIPT CODE 1(我的代码):http://jsfiddle.net/chrisguzman/s4dBE/4/

  myapp.controller("SampleController",
    function SampleController($scope,$firebase){
        var ref = new Firebase("https://helloworldtest.firebaseio.com/text");
        var service = $firebase(ref);
        service.$bind($scope, "text");
    })

JAVASCRIPT CODE 2(原始代码):http://jsfiddle.net/chrisguzman/s4dBE/3/

angular.module("sampleApp", ["firebase"])
  .factory("sampleService", ["$firebase", function($firebase) {
    var ref = new Firebase("https://helloworldtest.firebaseio.com/text");
    return $firebase(ref);
  }])
  .controller("SampleController", ["$scope", "sampleService",
    function($scope, service) {
      service.$bind($scope, "text");
    }
  ]);

奖金问题:还有其他方法可以不同方式编写第二个代码脚本。我问的原因是因为它有助于进一步理解它。特别是,我希望看到在不使用工厂的情况下完成相同的任务,并且将一个函数看作控制器的第二个参数会很棒(因为那是什么' s暴露于)。

1 个答案:

答案 0 :(得分:3)

工厂的要点是为您的数据提供单一源点,您可以将该工厂注入其他控制器。您必须在每个想要使用它的控制器中复制Firebase,而不是仅仅注入工厂。对于一个简单的一个控制器应用程序,这不是任何问题,但随着您的应用程序的增长,它将成为一个大问题。

使用工厂的一个样本:

var app = angular.module('firebaseApp',['firebase']);

app.factory('FBService',function($firebase) {
    var firebase_url = "https://helloworldtest.firebaseio.com/";

    return {
        ref: function(ref_path) {
            var new_ref = new Firebase(firebase_url + '/' + ref_path + '/');
            return $firebase(new_ref);
        }
    }
});

app.controller('List1Ctrl',function($scope,FBService) {
    $scope.list1 = FBService.ref('list1');
});

app.controller('List2Ctrl',function($scope,FBService) {
    $scope.list2 = FBService.ref('list2');
});