私のカスタムサービスが動作するのに問題があります。サービス間で非同期にデータを取得/設定するコントローラ間でデータを共有する - AngularJS
次のように私のサービスは次のとおりです。
app.service('userService', function(){
var user = [];
var setUser = function(newObj){
user.push(newObj);
};
var getUser = function(){
return user;
};
return {
setUser: setUser,
getUser: getUser
};
});
app.config(function($routeProvider,$locationProvider) {
$routeProvider
.when('/', {
templateUrl : 'views/home.html',
controller : 'indexController'
})
.when('/me.html', {
templateUrl : 'views/me.html',
controller : 'meController'
});
// Get rid of the additional default pound sign during routing
$locationProvider.html5Mode(true);
});
app.controller('indexController', function($http,userService) {
...
$http.post("somewhere")
.then(function(response){
userService.setUser({test: "test});
location="/me.html";
}
.then(function(response){
userService.setUser({test: "test});
location="/me.html";
})
});
私は別のコントローラではconsole.logを行うと、それは空の配列を返しますが、次のように私はそれを呼び出します。何がうんざりですか?私のコードのいくつかは曖昧だった
app.controller('meController',function($http,userService){
console.log(userService.getUser()); => returns an empty array []
});
EDIT は、もう少し明確にする必要があり、私のルートセクションを追加しました。 EDIT 2 setUser()の後、console.log(userService.getUser())の行にスティックを置くと、正しくデータが表示されます。
すなわち多分
$http.post("somewhere")
.then(function(response){
userService.setUser({test: "test});
location="/me.html";
}
.then(function(response){
userService.setUser({test: "test});
location="/me.html";
console.log(userService.getUser()); => correct output
})
コードに構文エラーがあります。 AJAXリクエストが完了した後、2番目のコントローラがデータを要求していることを確認していますか?コントローラが初期化されたときに表示される[mcve]を共有してください。 –
'console.log'は、コントローラが作成されたときに実行され、アプリケーションが実行されるときに実行されます。その時点で配列には何もありません。あなたのアプリはうまくいくかもしれませんが、アレイに正しくアクセスしていないだけです。 –
Hmm私は角度ルーティングを使用していますが、2番目のコントローラが後でインスタンス化されるという意味ではありませんか?コントローラが作成されたときには – intrinsiciwnl