私にはサービスと少数のコントローラがあります。
サービスはポストリクエストを行い、コントローラはサーバから返されたデータを使用すると考えます。
残念ながらRightsMainService.rightsArrayはオブジェクトを含む配列を返し、すべてのオブジェクトには「未定義」フィールドしかありません。
また、RightsMainService.initは常にfalseです。 問題がどこにあるかわかりません。サービスからコントローラへのデータを使用する際の問題
app.service('RightsMainService', ['$http', '$rootScope', '$state', function($http, $rootScope, $state) {
var self = this;
this.rightsArray = [];
this.init = false;
this.loadRights = function(rightsObject) {
var config = {
headers : {
'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;'
}
};
$http.post('./server/user.php', $.param(rightsObject), config)
.success(function(data,status, headers, config) {
self.rightsArray = data;
self.init = true;
$rootScope.$broadcast('finishLoadingEvent');
})
.error(function(data, status, header, config) {
alert(status + " " + header);
return;
});
$state.go('rights');
}
}]);
app.controller('RightsMainCtrl', ['$scope', '$rootScope', 'RightsMainService', function($scope, $rootScope, RightsMainService) {
var rightsArrayInitialized = false;
var rightsArray = [];
(function Initialize(){
if(RightsMainService.init == false) {
alert("init");
$rootScope.$on('finishLoadingEvent', function() {
rightsArrayInitialized = true;
rightsArray = RightsMainService.rightsArray;
for(var key in rightsArray[0]) {
alert(rightsArray[key]);
}
})
} else {
rightsArrayInitialized = true;
rightsArray = RightsMainService.rightsArray;
for(var key in rightsArray[0]) {
alert(rightsArray[key]);
}
}
})();
}]);
警告を無視してください、彼らは$http
が完了する前に、$state.go('rights');
を呼び出しているテストの目的のためにそこに
「成功」機能で何が起こっているのか、実際にサーバーからデータがロードされているかどうかを知る必要があります。また、実際のネットワーク要求/応答のペアをブラウザーで調べて、期待されるものが含まれているかどうかを確認します。 – Stevo
ねえ、それは正しいデータをロードし、正しく放送を送信します、私はそれを数回チェックしました。 私はサービス内のinit変数のfalse値を思いついていますが、コントローラは常にfalseと見なします。 –