从AngularJS-Client加载Google Cloud Endpoint库不起作用

时间:2016-03-16 22:42:17

标签: angularjs google-cloud-endpoints google-eclipse-plugin

我有一个正常工作的端点,使用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加载?

我很乐意提供一些提示或建议如何调试加载过程。

1 个答案:

答案 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库。