Angular JS - 将Firebase数据从服务传递到控制器

时间:2016-01-10 15:27:17

标签: angularjs ionic firebase

我正在尝试将Firebase数据从服务传递到控制器但收到错误:TypeError: MeetingNamesService.myCalTimes不是函数

服务

angular.module('app.services', [])

.factory('MeetingNamesService', [function($firebaseArray){

    var myCalTimes = new Firebase("https://xxxxxxxx.firebaseio.com");

    myCalTimes.on("value", function(snapshot) {
        var calTimes = snapshot.val();
        return $firebaseArray(calTimes);        

    }, function (errorObject) {
      console.log("Data failed: " + errorObject.code);
    });
}])

控制器:

.controller('monthsCtrl', function($scope, MeetingNamesService, $ionicLoading) {

    $scope.times = MeetingNamesService.myCalTimes();
    $scope.times = calTimes;    
    console.log($scope.times);
})

知道为什么它不能将 myCalTimes 识别为函数吗?感谢。

3 个答案:

答案 0 :(得分:1)

您需要在获取数据后返回服务:

angular.module('app.services', ['firebase'])

.factory('MeetingNamesService', ['$firebaseArray', function($firebaseArray){
  var myCalTimes = new Firebase("https://xxxxxxxx.firebaseio.com");
  return {
    getCalTimes: getCalTimes
  }
  function getCalTimes() {
      return $firebaseArray(mycalTimes);        
  }
}]);

你的控制器应该调用如下函数:

.controller('monthsCtrl', function($scope, MeetingNamesService, $ionicLoading) {
  $scope.times = MeetingNamesService.getCalTimes();
  console.log($scope.times);
});

答案 1 :(得分:0)

试试这个

angular.module('app.services', [])

.factory('MeetingNamesService', ['$firebaseArray', function($firebaseArray){
    // this instead of var
    this.myCalTimes = new Firebase("https://xxxxxxxx.firebaseio.com");

    this.myCalTimes.on("value", function(snapshot) {
        var calTimes = snapshot.val();
        return $firebaseArray(calTimes);        

    }, function (errorObject) {
      console.log("Data failed: " + errorObject.code);
    });
}])

答案 2 :(得分:0)

让工厂中的函数将回调作为参数,如下所示:

function foo(callback) {
            fbRef.on('value', function (dataSnapshot) {
                        callback(dataSnapshot.val());
                    });
        }

并像这样使用它:

service.foo(setFoo);
setFoo = function(data) {
// Use data here
}
<。> .on()函数返回一个promise而不是一个函数:)