2015-05-27 4 views
0

У меня есть приложение панели задач Office, написанное с помощью API Office Javascript (Office.js), который вызывает Office.context.document.getFilePropertiesAsync и помещает возвращаемый URL в угловую переменную :Office.js getFilePropertiesAsync не работает при втором вызове в Angular.js

$scope.getDocumentUrl = function() { 

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

У меня есть кнопка, которая называет это. Это работает файл в первый раз, но когда я нажимаю на кнопку второй раз, он никогда не входит в функцию обратного вызова и отображает эту ошибку:

TypeError: Object expected at verifyAndExtractCall (https://localhost:44304/scripts/office/1.1/o15apptofilemappingtable.js:11:54588) at Anonymous function (https://localhost:44304/scripts/office/1.1/o15apptofilemappingtable.js:11:83048) at Anonymous function (https://localhost:44304/scripts/office/1.1/o15apptofilemappingtable.js:11:86071) at $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) at callback (https://localhost:44304/AngularJs/bower_components/angular/angular.js:21566:17) at Scope.prototype.$eval (https://localhost:44304/AngularJs/bower_components/angular/angular.js:14466:9) at Scope.prototype.$apply (https://localhost:44304/AngularJs/bower_components/angular/angular.js:14565:11) at Anonymous function (https://localhost:44304/AngularJs/bower_components/angular/angular.js:21571:17) at jQuery.event.dispatch (https://localhos

Это упрощенная версия другой ситуации, которая создает ту же ошибку. Это также происходит с getFileAsync. Я знаю, что мне нужно $ scope. $ Apply для отображения изменения. Я знаю, что вы можете получить URL-адрес другими способами. Мне нужно знать причину ошибки.

ответ

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) {  
    }; 
})(); 

Вы можете получить URL, нажав на кнопку "Получить ссылку". Я тестировал его в Excel 2013 SP 1.

+0

И работает ли он во второй раз? –

+0

Несомненно. Я подключаю отладчик к IE. Я подтверждаю, что Office.context.document.getFilePropertiesAsync() вызывается каждый раз, когда я нажимаю кнопку, а не исключение. –