目前正在学习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暴露于)。
答案 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');
});