私は簡単なニュースアプリを構築しています。イオンアプリの約束は最初のビューでのみ機能します
2つのビューがあります。
1つはストーリーのリストで、もう1つはカテゴリのリストです。それぞれにhttp.jsonp
リクエストがあります。
問題は、ロードされた最初のビューのコントローラだけが返される約束を得ることです。たとえば、ストーリーリストビューを最初にロードすると(他のページではブラウザ内にページをロードしています)、http.jsonpリクエストが正常に送信され、私の "back to stories promise"アラートが表示されます。次に、タブボタンをクリックしてカテゴリビューに切り替えると、http.jsonpリクエストとデータが返されるので、コントローラのgetCats()を呼び出す必要がありますが、約束は返されません。 「getCatsから約束する」警告が表示されます。まったく同じコードを使用していますが、ブラウザでカテゴリビューを最初に読み込むと、最初にカテゴリが設定されますが、私がストーリービューに切り替えると、再びその約束が返されません。だから、それはアプリ内の2番目のビューに切り替えることに関連しているようです。
約束を返すために2番目のビューを取得するにはどうすればよいですか?
app.controller('listCtrl', ['$q','$scope','$state', 'StoriesFact',
function($q, $scope, $state, StoriesFact){
StoriesFact.getStories($scope).then(function(response){
alert("back from stories promise");
$scope.stories = response;
});
}]);
app.controller('sectionCtrl', ['$scope', 'StoriesFact',
function($scope, StoriesFact){
StoriesFact.getCats().then(function(response){
alert("back from getCats promise");
$scope.categories = response;
});
}]);
そしてここで、実際のHTTP呼び出しと私の工場で:
angular.module('reader.StoriesFact', [])
.factory('StoriesFact', function($http, $q, $state) {
return {
getCats: function() {
var q = $q.defer();
jsonURL = 'http://www.bendbulletin.com/somejson?callback=JSON_CALLBACK&pub=BendBulletin';
$http.jsonp(jsonURL)
.success(function(data) {
q.resolve(data.categories);
});
return q.promise;
},
getStories: function() {
var q = $q.defer();
jsonURL2 = 'http://www.bendbulletin.com/somejson?callback=JSON_CALLBACK&cats=1829480:1829507:1829469';
$http.jsonp(jsonURL2)
.success(function(data) {
q.resolve(data.stories);
});
return q.promise;
}
}
});
この場合、$ ionicView.enterを使用することができます。 – Hosar
これは実際には正確な答えではありませんが、私は別のルートを訪れました。このイベントは、最初のロードであってもキャッシュされたビューであっても起動します。私はjsonpの使用をやめ、単純な$ http.getを使っています。これは約束を返す。もう少し読んで、私はアプリがCorsの問題に対処する必要がないことを知りましたか?だから私はゲットを使っても大丈夫です。本当? –
Ajaxコールでは、常にCorsに対処する必要があります。 XmlHttpRequestはHttpRequestとは異なります。前者のケースでは、少なくとも私が知っているようにコルは再募集されています。 – Hosar