使用ui-route解析firebase数据

时间:2014-02-10 23:40:33

标签: angularjs firebase angular-ui-router

我是angular / ui-route和firebase的新手。

您知道是否可以使用ui-route解决firebase数据?

我尝试了以下状态:

      .state('contacts', {

        abstract: true,
        url: '/contacts',
        templateUrl: './assets/app/views/contacts/contacts.html',
        resolve: {
          contacts: ['contacts',
            function( contacts){
              return contacts.all();
            }],
          contactsFb:  WHAT TO SET ???  
        },

        controller: ['$scope', '$state', 'contacts', 'utils', 'contactsFb',
          function (  $scope,   $state,   contacts,   utils, contactsFb) {

            // Working Fine but not from firebase
            $scope.contacts = contacts;
            // Can't make it works... :-(
            $scope.contacts = contactsFb;

          }]
      })

这是工厂:

  .factory('contactsFb', function($firebase) {
    var url='https://evet.firebaseio.com/contacts';
    return $firebase(new Firebase(url));
  })

  .factory('contacts', ['$http', function ($http, utils) {
    var path = './assets/app/models/contacts.json';
    var contacts = $http.get(path).then(function (resp) {
      return resp.data.contacts;
    });

    var factory = {};
    factory.all = function () {
      return contacts;
    };
    factory.get = function (id) {
      return contacts.then(function(){
        return utils.findById(contacts, id);
      })
    };
    return factory;
  }])

无法使其有效...... :-( 也许你可以帮助我?

非常感谢!

1 个答案:

答案 0 :(得分:5)

尝试这样的事情:

.state('contacts', {

  abstract: true,
  url: '/contacts',
  templateUrl: './assets/app/views/contacts/contacts.html',
  resolve: {
    loadContacts:  function(contactsFb) {
      return contactsFb.promiseToHaveContacts();
    }  
  },

  controller: function ($scope, contactsFb) {
      $scope.contacts = contactsFb.contacts;
    }
})

.factory('contactsFb', function($firebase, $q) {
  return {
    contacts: null,
    promiseToHaveContacts: function() {
      var deferred = $q.defer();

      if (this.contacts === null) {
        this.contacts = $firebase(new Firebase('https://evet.firebaseio.com/contacts'));
        this.contacts.$on('loaded', function(loadedData) {
          deferred.resolve();
        });
      }
      else {
        deferred.resolve();
      }

      return deferred.promise;
    }
  };
});