我有一个控制器从firebase收集数据。我在我的网站上使用它,所以它一直在调用。
app.controller("ReplicatedController", function($scope, $routeParams, $firebaseObject) {
var parts = location.hostname.split('.');
var refSubdomain = parts.shift();
var ref = new Firebase("https://example-firebase.firebaseio.com/" + refSubdomain);
var syncObject = $firebaseObject(ref);
syncObject.$bindTo($scope, "coach");
if($routeParams.my_affiliate){
var myAffiliate = $routeParams.my_affiliate;
window.location = "http://" + myAffiliate + ".example.com";
};
});
这很好用,但我的问题是我应该把它移到服务中吗?这会让我更少访问我的Firebase吗?
将这样的东西转移到服务中的最佳方法是什么?我是否只是创建一项服务。
app.factory('ReplicatedService', ['$http', function($scope, $routeParams, $firebaseObject){
var parts = location.hostname.split('.');
var refSubdomain = parts.shift();
var ref = new Firebase("https://example-firebase.firebaseio.com/" + refSubdomain);
var syncObject = $firebaseObject(ref);
syncObject.$bindTo($scope, "coach");
if($routeParams.my_affiliate){
var myAffiliate = $routeParams.my_affiliate;
window.location = "http://" + myAffiliate + ".example.com";
};
});
然后从我的控制器调用服务?
app.controller('ReplicatedController', ['$scope','ReplicatedService', function($scope,ReplicatedService){
}]);
我似乎无法让它发挥作用。另外我为什么需要改变它?它会提高性能,还是只使代码更清晰易读?
答案 0 :(得分:2)
您的工厂提供商没有退货。要访问它,您需要实际返回同步对象。
app.factory('ReplicatedService', ['$http', function($scope, $routeParams, $firebaseObject){
var parts = location.hostname.split('.');
var refSubdomain = parts.shift();
...
return syncObject;
});
app.controller('...', function(ReplicatedService) {
$scope.data = ReplicatedService;
});
这是通过简化进行调试的典型案例。要自己解决这个问题,首先要将其分解为您可以设想的最小的工作组件:
app.factory('test', function() {
return { foo: 'bar' };
});
app.controller('...', function($scope, test) {
$scope.test = test;
});
然后单独添加组件,直到它中断或按预期工作。处理多种新技术和概念时的一种很好的方法。