2015-10-13 2 views
2

Je travaille sur un PowerPoint-AddIn en utilisant AngularJS. Pour obtenir la langue des utilisateurs, j'utilise Office.context.displayLanguage qui n'est disponible que dans Office.initialize -Callback. Je reçois mes Language-Strings à travers une Angular-Factory. Lorsque je mets le Office-initialiser -Callback dans mon contrôleur angulaire il casse la fonctionnalité de contrôleur et aucun bouton sur ma page ne fonctionnera plus. Qu'est-ce que je fais mal?Office.js Ruptures de rappel Angular Controller

myApp.controller('angularHomeController', ['$scope', 'lang', function ($scope, lang) { 
    $scope.lang = lang.getLocaleStrings("en-US"); 
    Office.initialize = function (reason) { 
     $scope.lang = lang.getLocaleStrings(Office.context.displayLanguage); 
    } 
}]); 

définir la langue par défaut pour l'anglais, mais je veux que ce soit changé lorsque le document est initialisé et je peux accéder au displayLanguage. Mon application fonctionne correctement jusqu'à ce que je mets l'Office.initialize -Callback à l'intérieur de mon contrôleur. Devrais-je injecter l'Office-Object en quelque sorte? Je ne reçois aucun message d'erreur.

+0

Je vais avoir le même genre de problème, j'ai un 'outlookService' (angulaire) où je fais tout mon' appelle Office'. Mais la fonction 'Office.initialize' n'est jamais appelée. Toujours en train de travailler dessus, j'ai trouvé ça sur le web: http://www.chaosm.net/blog/2014/07/27/load-angularjs-after-office-initialized/ tiens moi au courant. ;) – Elfayer

Répondre

5

J'ai eu un problème similaire à celui que j'ai mentionné dans les commentaires. Il vous suffit de déclarer Office.initialize dans votre balise <head> et bootstrap votre module angulaire à l'intérieur:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8" /> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js" type="text/javascript"></script> 

    <!-- Add the following script --> 
    <script type="text/javascript"> 
     Office.initialize = function (reason) { 
      angular.bootstrap(document, ['myOfficeModule']); 
     }; 
    </script> 

    <script type="text/javascript" src="../../Scripts/Angular/angular.min.js"></script> 
    <!-- Other scripts --> 

</head> 
<body> 
    <ng-view></ng-view> 
</body> 
</html> 

Note: Il n'y a plus besoin de ng-app="myOfficeModule" pendant que vous bootstrapping manuellement.

Cela fonctionne pour moi, maintenant l'objet Office est accessible depuis mes services. J'espère que cela fonctionne pour vous aussi.

Source utilisée: http://www.chaosm.net/blog/2014/07/27/load-angularjs-after-office-initialized/

+0

Le code de l'Elfayer doit fonctionner. L'application angulaire doit se déclencher manuellement après l'événement Office.initialize –

+0

@Elfayer Une fois que j'ai effectué cette opération, l'initialisation est réussie, mais les événements angulaires et les modèles ne fonctionnent pas. Peux-tu aider s'il te plait? –