我开始学习很多与混合应用程序编码相关的东西。我决定继续使用基于 AngularJS 的 Ionic 框架(这让我有机会学习它),并使用 Firebase 作为我的后端解决方案。
我想在我的应用程序中设置一个地图,以便找到用户和他周围的一些兴趣点。我发现 GeoFire 存在,所以我开始使用它。
我的问题:我无法显示保存到 Firebase 中的用户位置。我使用 GeoFire 查询它,并获得响应(console.log 它),但它不会更新范围变量。
这是JS代码:
myApp.factory("MyLoc", function(){
var firebaseRef = new Firebase("https://myfirebase.firebaseio.com/geofire/");
var geoFire = new GeoFire(firebaseRef);
/* geoFire.set("user_loc", [37.785326, -122.405696]).then(function() {
console.log("Provided key has been added to GeoFire");
}, function(error) {
console.log("Error: " + error);
});*/
return geoFire.get("user_loc").then(function(location) {
if (location === null) {
console.log("Provided key is not in GeoFire");
return 0;
}
else {
console.log("Provided key has a location of " + location);
return location;
}
}, function(error) {
console.log("Error: " + error);
return 0;
});
})
myApp.controller("firstCtrl", function($scope, MyLoc) {
$scope.data = {};
$scope.data.myLoc = MyLoc;
});
HTML 只是显示它:
{{data.myLoc}}
由于我是 Angular N00b,我想我遗漏了一些明显的东西。我想我应该使用承诺或类似的东西,只是不知道怎么做!有人能帮助我吗 ?:)
非常感谢兄弟们!
[更新]
好的,这是第一个问题的答案!
MyLoc.then(function(data){
$scope.data.myLoc = data;
$scope.$apply();
});
但是我不得不使用
$scope.$apply();
为了让 HTML 显示它,显然它不会立即更新。你知道为什么吗?我知道 Angular 必须被通知更改才能显示,这里很好地解释了:http: //jimhoskins.com/2012/12/17/angularjs-and-apply.html
我不明白,为什么会出现这种情况?为什么 Angular 不知道这个变化?
再次感谢 !