使用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
相关产品推荐
相关产品推荐

