我有一个正常工作的端点,使用API-Explorer本地和AppEngine成功测试。现在我尝试开发一个AngularJS-Client。上周我读了很多东西,但它不起作用。我的控制器看起来像那样。
'use strict';
const WEB_CLIENT_ID = "<...>.apps.googleusercontent.com";
const EMAIL_SCOPE = "https://www.googleapis.com/auth/userinfo.email";
function init() {
window.init();
}
angular.module('stakeholder1', [])
.controller('StakeholderController', ['$scope', '$window',
function StakeholderController($scope, $window) {
$window.init= function() {
$scope.$apply($scope.load_oauth_lib);
$scope.$apply($scope.load_stakeholder_lib)
};
$scope.load_oauth_lib = function() {
gapi.client.load('oauth2', 'v2', null);
gapi.auth.authorize({client_id: WEB_CLIENT_ID,
scope: EMAIL_SCOPE, immediate: false},
null);
};
$scope.is_backend_ready = false;
$scope.load_stakeholder_lib = function() {
gapi.client.load('stakeholderendpoint', 'v1',
function(){
$scope.is_backend_ready = true;
}, 'https://my-stakeholders.appspot.com/_ah/api');
};
$scope.saveStakeholder= function() {
stakeholder = {
"name" : $scope.name
};
gapi.
client.stakeholderendpoint.saveStakeholder(stakeholder).execute();
}
}]);
我的加价看起来像那样。如果我删除ng-show-Directive并发布名称,我会收到错误“angular.js:13236 ReferenceError:未定义利益相关者”。所以我认为API没有加载。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html ng-app="stakeholder1">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>MyStakeholders</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0/angular.min.js"></script>
<script src="../app/controllers/stakeholder1.js"></script>
<script src="https://apis.google.com/js/client.js?onload=init"></script>
</head>
<body>
<h1>MyStakeholders</h1>
<div ng-controller="StakeholderController" class="container" ng-show="is_backend_ready">
<form ng-submit="saveStakeholder()">
<input type="text" ng-model="name" required><br>
<input type="submit" class="btn" value="Post">
</form>
</div>
</body>
</html>
我正在使用Eclipse和GPE。在我的WEB-INF目录中,有一个生成的文件stakeholderendpoint-v1.api。该文件是否应该使用gapi.client.load加载?
我很乐意提供一些提示或建议如何调试加载过程。
答案 0 :(得分:0)
是的,stakeholderendpoint
应该在使用gapi.client.load()
之前加载gapi.client.stakeholderendpoint
,然后才能gapi.client.load()
使用$scope.is_backend_ready
。
WEB-INF目录中的该文件很重要,但您可以忽略它。函数$rootScope
将处理幕后的所有内容。
在您的代码中,标志is_backend_ready
指示端点是否已加载并可供使用。您可以使用此标志保护UI免受错误的影响。但我建议将其存储在is_backend_ready
中以备将来在其他控制器中使用。或者甚至更好的是创建一个服务,它加载所有端点并存储class Person: Object {
var name: String {
get {
return _name
}
set {
_name = newValue
// perform tokenization...
tokenizedName = _name.lowercaseString
}
}
private dynamic var _name = ""
dynamic var tokenizedName = ""
override class func ignoredProperties() -> [String] { return ["name"] }
}
的状态。然后,您可以决定在加载端点期间显示一些进度条,直到_name
为真。
或者您可以使用angular-gapi库。