You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AngularFire从Firebase获取对象异常:未返回预期对象

解决AngularFire $firebaseObject获取Firebase对象异常的问题

我帮你梳理下代码里的关键问题,以及对应的修复方案:

1. 模块依赖注入语法错误

你在定义moiveapp模块时,错误地把依赖项拆成了两个数组,这不符合AngularJS模块定义的规范。正确的写法是把所有依赖放在同一个数组内。

错误写法:

angular.module('moiveapp', ['ngRoute'],['firebase'])

修正后:

angular.module('moiveapp', ['ngRoute', 'firebase'])

2. 数据库引用逻辑错误

你当前用ref = firebase.database().ref("allmovies").push()生成了一个新的随机节点引用,但你的需求是根据传入的ID获取已存在的对象——push()是用来创建带随机ID的新节点,完全不适合用来获取已有节点。

正确的引用应该直接指向allmovies下对应ID的目标节点:

var movieRef = firebase.database().ref("allmovies").child(ID);

3. 完整修正后的代码

结合上面的修复,你的Movie工厂应该写成这样:

(function(){ 
  'use strict'; 

  angular.module('moiveapp', ['ngRoute', 'firebase']) 
  .factory("Movie", ["$firebaseObject", function($firebaseObject) { 
    return function(ID) { 
      // 直接定位到allmovies下对应ID的节点
      var movieRef = firebase.database().ref("allmovies").child(ID); 
      // 返回同步的$firebaseObject实例
      return $firebaseObject(movieRef); 
    }
  }]);
})();

额外使用提示

  • 确保你已经正确引入Firebase和AngularFire的脚本文件,并且完成了Firebase应用初始化(比如通过firebase.initializeApp(config))
  • 确认传入的ID值和数据库中存在的节点ID完全匹配
  • 可以通过$loaded()方法监听对象加载状态,方便调试:
    var movie = Movie('your-target-movie-id');
    movie.$loaded().then(function() {
      console.log("对象加载完成:", movie);
    }).catch(function(err) {
      console.error("加载失败:", err);
    });
    

内容的提问来源于stack exchange,提问作者Alex Crowel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:30:46