【发布时间】:2015-12-09 22:50:15
【问题描述】:
我正在使用 Angularfire,有一种情况是 $firebaseArray 或 $firebaseObject 一开始什么都不返回。这是因为它是空的或还不存在。但我想一直为那个对象/数组做 $watch 。稍后再说,节点实际上是存在的。原始的$firebaseArray 或$firebaseObject 不会触发$watch 事件。
即使节点为空/一开始不存在,我如何确保 $watch 的绑定发生?当我创建一个新用户并且某个节点中没有任何内容时会发生这种情况。
更新 1
http://plnkr.co/edit/tQur74nkRIE9ZOiJUAgf?p=preview
JS
var app = angular.module('plunker', ['firebase']);
var Ref = new Firebase('https://so32556276.firebaseio.com');
app.controller('MainCtrl', function($scope, $firebaseObject) {
$scope.data = $firebaseObject(Ref.child('user'));
$scope.data.$loaded().then(function(res) {
$scope.data.$watch(function(e) {
console.log('Something changed');
console.log(e);
});
});
$scope.changeName = function() {
$scope.data.name = "test2";
$scope.data.$save();
}
$scope.changeAge = function() {
$scope.data.age = "10";
}
});
HTML
<body ng-controller="MainCtrl">
<p>Hello {{data.name}}!</p>
<p>Your age is {{data.age}}!</p>
<a href="" ng-click="changeName()">Change Name</a><br>
<a href="" ng-click="changeAge()">Change Age</a>
</body>
Firebase
如果我点击“更改名称”,你可以在这里看到日志事件:
Something changed
app.js:10 Object {event: "value", key: "user"}
如果我点击“更改年龄”,虽然前端可以检测到变量,但$watch 对此没有可见性。控制台中没有任何内容。
任何线索如何避免这种情况?
【问题讨论】:
-
我用上面的代码更新了。
-
感谢代码和 plunkr。有了这些,很容易找出问题所在。下面回答。清理上面的 cmets。
标签: javascript angularjs firebase angularfire