我正在按照教程创建一个用于角度的邮件客户端应用程序,我稍微偏离了sinatra建议实施firebase后端。 HTML使用ng-repeat
angular指令列出控制器$scope.email
中的电子邮件。当我将$http
方法与get请求一起使用时(正如我后面的教程所做的那样),当get请求返回并且一切似乎都正常时,$scope.email
会更新。但是,当我尝试使用fb.on()
方法时,我的视图不会更新。我知道fb.on
是异步的,它确实似乎更新了$scope.email
变量,但不知何故该指令没有得到更新。
以下作品:
app.controller('MailListingController',function($scope, $http){
$http({
method:'GET',
url:'https://XXXXX.firebaseio.com/email.json'
}).success(function(data,status,headers){
console.log(data);
$scope.email=data;
console.log($scope.email);
}).error(function(data,status,headers){
console.log('error');
});
但这并不是:
app.controller('MailListingController',function($scope, $http){
fb = new Firebase("https://XXXXX.firebaseio.com/email");
fb.on("value",function(snapshot){
console.log(snapshot.val());
$scope.email=snapshot.val();
console.log($scope.email);
//console shows $scope.email was successfully set
}, function(errorObject){
console.log("the read failed: "+errorObject.code);
});
我知道Firebase有一个Angularfire教程,它可能会有不同的做法,但我不明白第二种方法有什么问题。似乎异步性或范围界定的任何问题都应该适用于任何一种方法,所以我很困惑。有谁知道为什么这不起作用?
谢谢!