クラウドエンドポイントでAngularJSをブートストラップするためのGoogleドキュメント(下にスクロール)に従いました。私のコードは次のようになります:
index.html
<!DOCTYPE html>
<html ng-app="AnimalsApp">
<head>
<meta charset="UTF-8">
<title>Animal Manager Server</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.28/angular.min.js"></script>
<script src="js/animal.js"></script>
<script src="https://apis.google.com/js/client.js?onload=init"></script>
</head>
<body>
<div ng-controller="MainCtrl" class="container">
{{message}} world
</div>
</body>
</html>
animal.js
angular.module('AnimalsApp', [])
.controller('MainCtrl', ['$scope', '$window', function($scope, $window) {
$scope.message = 'Hello';
$window.init = function() {
$scope.$apply($scope.load_guestbook_lib);
};
$scope.load_guestbook_lib = function() {
gapi.client.load('creatureCloud', 'v1', function() {
$scope.is_backend_ready = true;
$scope.message = 'Hello beautiful';
console.log('Made it!');
}, 'http://localhost:8888/_ah/api');
};
}]);
function init() {
window.init();
}
テキストMade it!
はコンソールログに表示され、コールバックが実行されたことを示します。ただし、設定し$scope.is_backend_ready = true
ても表示には影響しません<div id="listResult" ng-controller="MainCtrl" class="container">
。これにより$scope
、コールバック内のオブジェクトが正しく機能していないと思われます。
私は何を間違えましたか?Googleドキュメントは間違っていますか?
あなたの使用意図$scope.$apply()
は正しいですが、それは間違った場所にあります。あなたはそれからではなくコールバックでそれをする必要があります。あなたが持っている方法で、あなたは関数load_guestbook_lib
を実行し、次にダイジェストサイクルを実行しています。gapi.client.load
関数は非同期であるため、後で実行され、角度のあるコンテキスト外で発生するため、ダイジェストは発生しません。
試してみてください:
$window.init = function() {
$scope.load_guestbook_lib(); //Just invoke the function
};
$scope.load_guestbook_lib = function() {
gapi.client.load('creatureCloud', 'v1', function() {
$scope.is_backend_ready = true;
$scope.message = 'Hello cats';
console.log('Made it!');
$scope.$apply(); //<-- Apply here
}, 'http://localhost:8888/_ah/api');
};
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加