私はAngularが初めてで、サービスを使用してあるコントローラーから別のコントローラーにデータを渡す方法を理解するのに苦労しています。
これまでの Angular では、コントローラーを呼び出して、HTML 内からコントローラーにデータを渡す方法を理解できました。マップ コントローラーをセットアップするには、これは特に優れています。これにより、PHP からの結果のリストを調べ、それらの結果のデータをコントローラーに送信して、マップ上にマーカーを作成します。
私が完全に困惑したのは、ElasticSearch 呼び出しを介してネストされたオブジェクトを生成し、そのデータを Map Controller に渡す 1 つのコントローラーがあることです。
最初に ng-repeat を介して結果をループしようとしましたが、結果を出力することはできましたが、MapController はこれらの結果を HTML で読み取ることができませんでした。 )。まあ、そうだったと思います。
これは私が試したもので、データを出力しましたが、MapController で読み取ることができませんでした。
<div ng-controller="IndexController">
<div ng-repeat="r in listingsArea.results">
<div class="component home-listings"
data-id="{{r.id}}"
data-url="{{r.url}}"
data-lat="{{r.lat}}"
data-lng="{{r.lon}}"
data-address="{{r.address}}"
data-price="{{r.price}}"
></div>
</div>
</div>
あるコントローラーから別のコントローラーにデータを渡す最良の方法は、サービスを介することだと読みました。ここで多くのドキュメントに従ってきましたが、それにもかかわらず、機能していないため、明らかに何かが欠けています。
これは私がこれまでに持っているものです:
ResultsService.js
App.factory("resultsService", function() {
var loadListingsArea = {};
return {
getLocations: function() {
return loadListingsArea
},
setLocations: function(loc) {
loadListingsArea = loc;
IndexController.js
App.controller('IndexController', function($scope, resultsService) {
$scope.listingsArea = [];
$scope.loadListingsArea = function() {
$http.get($window.location + '/listingsarea')
.success(function(data) {
$scope.listingsArea = data;
}
);
}
$scope.$watch(function() {
return $scope.loadListingsArea;
}, function() {
resultsService.setLocations($scope.loadListingsArea);
});
});
MapController.js (この段階でオブジェクトをダンプしようとしているだけで、Google マップの非常に長いコード ベースは含まれていません)
App.controller('MapController', function($scope, resultsService) {
$scope.locations = resultsService.getLocations();
alert($scope.locations);
これは、indexcontroller.js からダンプされたときにオブジェクトがどのように見えるかのサンプルです。
{"count":4,
"results":[
{"id":"1153292",
"url":"/this-is-my-slug/1153292",
"lat":"-37.822034",
"lon":"144.969553",
"address":"1302/430 Place Road",
"price":"$2,350,000",
"hero":"some-image-here.jpg"}
]};