使用Angular 4的Outlook外接程序



我正在使用angular4开发Outlook外接程序。我很难理解关于使用angular开发office插件的一些概念。

  1. 我需要在main.ts中同时实现Office.initializeOffice.OnReady()吗?因为每当我启动应用程序时,我都会收到一个错误,即尽管我使用了Offize.initialize,但我没有实现Office.OnReady
  2. 每次使用应用程序中的某些办公组件时,是否需要使用Office.initialize
  3. 如果我在开发模式而不是生产模式下运行应用程序,这会影响我的外接程序吗
  4. 是否可以在Office对话框中而不是在任务窗格中运行我的angular应用程序,即我的任务窗格上有一个简单的html(只包含一个按钮),当我单击该按钮时,它会在对话框中打开我的angle应用程序
  5. 或者我可以在对话框中打开应用程序的单个组件吗?如果是,有人能用一个示例代码解释一下吗
  1. 您只需要实现其中一个。在正确初始化Office之前,您可能正在尝试访问某些office方法。我通常喜欢做的是有一个带有微调器的加载屏幕,并且只有在office初始化后才能从该屏幕导航。

    Office.initialize = function(reason) {
    window.location.hash = 'apploaded';
    }
    
  2. 不需要-您只需要初始化它一次,除非您正在刷新服务器。只要你停留在应用程序的上下文中,不刷新整个应用程序,只在组件之间导航,你就应该没事了。

  3. 它可能会,尤其是如果你所说的local是指你在没有Office上下文的情况下做这件事(所以你不在客户端)。我通常解决这个问题的方法是从不直接访问Office对象,而是始终通过服务访问,在Office对象/或其子属性出现问题时,该服务不会失败。所以不是

    // calling directly in some component
    office.context.mailbox.item.to.getAsync 
    

    我会做

    OfficeService.GetAsync() {
    if (Office && Office.context && Office.context.mailbox && ...) {
    // call real method
    }
    else {
    console.log('Detected local mode - without office context')
    // do a fake test operation instead of the real thing.
    }
    }
    
  4. 查看函数File。这在功能区中为您提供了一个按钮,您可以单击该按钮并基本上执行一个功能。它仍然会将html加载到一个不可见的浏览器中,但在这种情况下,你不会得到一个任务窗格。不过,这应该只在一部分客户端中得到支持,而不是所有客户端。

  5. 有几种方法可以做到这一点,您可以将清单中的任务窗格条目url指向该组件url。像这个

    <SourceLocation DefaultValue="https://randommailaddin.org/component"/>
    

并将/component路由映射到您的组件,因此当用户单击该按钮时,它将只加载该组件。不过,您仍然需要初始化office上下文,否则您的函数将无法工作。

最新更新