主にリモートjsonオブジェクトからのデータで駆動される角度でWebアプリを作成しています。適切なデフォルト データを含むページをロードし、json オブジェクトを要求して、この新しいデータでコントローラーを更新したいと考えています。
私が作成したサービスの一部を以下に示します。
clickApp.factory('client', ['$http', function($http){
var logoUrl = "first";
var getConfig = function() {
logoUrl = "second";
$http({method: 'GET', url: base_url+'app-config.json'}).
success(function(data, status) {
// this callback will be called asynchronously
// when the response is available
// console.log("data",data);
console.log("logopre",logoUrl);
logoUrl = "third";
console.log("logopost",logoUrl);
}).
error(function(data, status) {
console.log("error",status);
// called asynchronously if an error occurs
// or server returns response with an error status.
});
};
getConfig();
return {
logoUrl: logoUrl
}
}]);
現時点では、ap タグを logoUrl で埋めるだけのコントローラーがこれに接続されています。このコードでは、p タグはすぐに「second」に更新され、「logopre」のログ値は「second」、「logopost」のログ値は「second」ですが、コントローラーはp タグを「」に更新しません。 3番目の「期待どおりです。
コントローラーで派手な $scope.$watch ステートメントも試しましたが、結果は変わりません。
編集$http リクエストの後に $rootScope.$apply も試しましたが、「$digest は既に進行中です」というエラーしか表示されなかったことに注意してください。
$http リクエストの後にコントローラに反映されるように、この値を適切に更新するにはどうすればよいですか?