ハイブリッド アプリのコーディングに関連する多くのことを学び始めています。私は、AngularJS に基づいた Ionic フレームワークを使用することに決めました (これは私にそれを学ぶ機会を与えてくれます)、そして Firebase をバックエンド ソリューションとして使用することにしました。
アプリでマップをセットアップしたいので、ユーザーとその周辺のいくつかの興味のあるポイントを見つけます。GeoFire の存在を知ったので、それを使い始めました。
私の問題: Firebase に保存されているユーザーの場所を表示できません。GeoFire を使用してクエリを実行し、応答 (console.log it) を取得しますが、スコープ変数は更新されません。
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 が変更を認識しないのはなぜですか?
再度、感謝します !