【发布时间】:2014-07-31 21:57:11
【问题描述】:
您好,我一直在尝试使用新的 angularfire 版本 0.8 创建一个应用程序,该版本具有 $bind 的更新版本 $bindTo。但是我有一点困难。绑定到方法似乎仅在第一次更新时将更改传播回 firebase。页面上数据的后续更改不会。我需要在每次更新时重新绑定对象吗?
我创建了一个简单的应用程序来显示问题。该应用程序有一个在工厂(测试)中创建的对象,该对象将一个对象添加到 $rootScope。然后控制器访问它,视图访问它并根据需要进行更新。
工厂(services/test.js)
app.factory('Test',function($firebase, FIREBASE_URL, $rootScope) {
var URL = FIREBASE_URL + 'test12/';
var Test = {
create: function (user,obj) {
console.log("Creating new test object");
obj.something = "1234";
obj.somethingElse = "567";
obj.$priority="7";
obj.$save();
setCurrentTest(user);
},
getCurrent: function() {
return $rootScope.currentTest;
}
};
function setCurrentTest(user) {
var obj = $firebase(new Firebase(URL)).$asObject();
obj.$loaded().then(function() {
if (obj.$priority) {
obj.$bindTo($rootScope,'currentTest').then(function() {
console.log("bound");
});
}
else {
Test.create(user,obj);
}
});
}
$rootScope.$on('$firebaseSimpleLogin:login', function(e, user) {
setCurrentTest(user);
});
return Test;
});
控制器(controller/test.js)
app.controller('TestCtrl', function($scope, Test) {
$scope.testy = Test.getCurrent();
});
查看 (test.html)
<div class="t_center">
<h3>Testing</h3>
<div>
<input type="test" name="test1" value="testy.something" ng-model="testy.something"/>
<input type="test" name="test2" ng-model="testy.somethingElse"/>
</div>
<br/>
</div>
我正在使用;
- 角度#1.2.21
- firebase#1.0.18
- firebase-simple-login#1.6.2
非常感谢任何建议。
背景 我认为我的示例代码并没有很好地突出我想要实现的目标,所以我将提供一些我想要做的事情的背景。我在这里创建的对象(在此处的示例中称为“测试”)实际上基本上是一个用户配置文件。在通常的用户类型事物(名称等)中,它还包含一些由所有控制器使用的首选项。我不想复制该代码,而是想创建一个服务,该服务在登录时获取用户配置文件并将其放置在 $rootScope 中,以供任何控制器需要它使用。如果服务在系统中找不到配置文件,则会创建它(使用合理的值)。
【问题讨论】:
-
您使用的是 Angular 1.2.18+ 吗? firebase.com/docs/web/bindings/angular/…
-
唉(我希望有这么简单的东西:))。我已经编辑了帖子以包含我正在运行的版本。
-
这里的用例很难理解。为什么每次登录状态更改或任何时候 $priority 设置为 null 时都会绑定一个新的 $firebase 对象?为什么旧对象未绑定?为什么不继续绑定到同一个对象呢?您能否将其简化为仍然重现错误的最小示例?似乎有很多不必要的活动部件。
-
首先感谢您在此问题上回到我身边——对于 Angular 和 Firebase 来说都是新手。啊,我可能应该更好地解释用例,我使用 $rootScope 而不是 $scope 是故意的。虽然我很高兴看到我的方式的错误。我会为这个问题添加一点背景,看看你是否能看到是什么让我发疯:)
标签: angularjs firebase angularfire