Angular.js中的第二次调用时,Office.js getFilePropertiesAsync失败

时间:2015-05-27 14:15:11

标签: angularjs office-2013 apps-for-office

我有一个用Office Javascript API(Office.js)编写的Office任务窗格应用程序,它调用Office.context.document.getFilePropertiesAsync并将返回的URL放在角度变量中:

$scope.getDocumentUrl = function () {

    Office.context.document.getFilePropertiesAsync(function (asyncResult) {
        $scope.url = asyncResult.value.url;
    });
};

然后我有一个调用它的按钮。这是第一次工作文件,但是当我第二次按下按钮时,它从不进入回调并显示此错误:

  

TypeError:在verifyAndExtractCall处期望的对象   (https://localhost:44304/scripts/office/1.1/o15apptofilemappingtable.js:11:54588)   在匿名功能   (https://localhost:44304/scripts/office/1.1/o15apptofilemappingtable.js:11:83048)   在匿名功能   (https://localhost:44304/scripts/office/1.1/o15apptofilemappingtable.js:11:86071)   在$ scope.getDocumentUrl   (https://localhost:44304/AngularJs/controllers/sandpit.controller.js:130:6)   at $ parseFunctionCall   (https://localhost:44304/AngularJs/bower_components/angular/angular.js:12403:7)   在回调   (https://localhost:44304/AngularJs/bower_components/angular/angular.js:21566:17)   在Scope.prototype。$ eval   (https://localhost:44304/AngularJs/bower_components/angular/angular.js:14466:9)   在Scope.prototype。$ apply   (https://localhost:44304/AngularJs/bower_components/angular/angular.js:14565:11)   在匿名功能   (https://localhost:44304/AngularJs/bower_components/angular/angular.js:21571:17)   在jQuery.event.dispatch(https://localhos

这是另一种情况的简化版本,会产生相同的错误。 getFileAsync也会发生这种情况。我知道我需要$ scope。$ apply来显示更改。我知道你可以通过其他方式获取URL。我需要知道错误的原因。

1 个答案:

答案 0 :(得分:1)

我在本地计算机上测试您的场景。我无法重复你的问题。

我的简单测试应用程序有两个文件:AngularTest.html和AngularTest.js。

AngularTest.html中的内容:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <title></title>
    <script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.js"></script>
    <script src="//ajax.microsoft.com/ajax/4.0/1/MicrosoftAjax.js" type="text/javascript"></script>
    <script src="https://appsforoffice.microsoft.com/lib/1.1/hosted/office.js" type="text/javascript"></script>
    <script src="AngularTest.js" type="text/javascript"></script>
</head>
<body>
    <div ng-app="myApp" ng-controller="myCtrl">
        <button ng-click="getDocumentUrl()">Get Url!</button>
        Url is: {{url}}
    </div>
</body>
</html>

AngularTest.js中的内容:

(function () {
    "use strict";
        var app = angular.module('myApp', []);
        app.controller('myCtrl', function($scope) {
            $scope.url = "";
            $scope.getDocumentUrl = function () {
                Office.context.document.getFilePropertiesAsync(function (asyncResult) {
                    $scope.url = asyncResult.value.url;
                });
            };        
        });        
    Office.initialize = function (reason) {      
    };
})();

您可以点击“获取网址”按钮获取网址。我在Excel 2013 SP 1中测试了它。