如何在Google Apps脚本中使用AngularJS与服务器进行通信

rGi*_*Gil 2 google-apps-script angularjs

最近,通过iframe沙盒模式,可以在Google Apps脚本中使用angularjs。

当尝试与服务器(gapps电子表格)进行通信并接收异步数据作为回报时,我遇到了问题。

从服务器接收数据的实现是使用带有回调函数的函数,如下所示:

google.script.run.withSuccessHandler(dataGatheringFunction).getServerData();
Run Code Online (Sandbox Code Playgroud)

getServerData()将是驻留在服务器端的函数,通常会从随附的电子表格中返回一些数据。我的问题是如何在AngularJS的参数内使用回调函数。$http可以将典型函数放在提供程序中,并且可以在then.()返回后填充范围值。我也可以调用$q。但是我将如何处理Google回调的必要性?

这是到目前为止我所用的简化版本:

app.factory("myFactory", function($q){

  function ssData(){
  var TssData = function(z){
  return z;
}
google.script.run.withSuccessHandler(TssData).getServerData();
var deferred = $q.defer();
var d = deferred.resolve(TssData)
console.log("DP: " + deferred.promise);
return deferred.promise;
}  
return ssData();
})
Run Code Online (Sandbox Code Playgroud)

然后在控制器中解析类似于以下内容的服务器调用:myFactory.then(在此处设置一些变量和返回数据

我的问题很简单-如何在提供程序中处理该回调函数?

该脚本不会引发任何错误,但是不会从服务器返回数据。我可以使用旧的$ timeout技巧来检索数据,但是应该有更好的方法。

小智 5

您只需要$ apply应用服务器功能的输出:

google.script.run.withSuccessHandler(function(data) {

  $scope.$apply(function () {
    $scope.data = data;
  });

}).withFailureHandler(errorHandler).serverFunction();
Run Code Online (Sandbox Code Playgroud)