依靠AngularJS的Excel加载项中的“ng-app”

时间:2018-01-02 04:58:34

标签: angularjs ms-office mean-stack office-js office-app

我已经mean-stack开发了一个Excel加载项。很久以前,我在某个地方看到了一个关于用office.js启动AngularJS加载项的答案(遗憾的是我再也找不到该线程了)。建议采用以下解决方案,但我不记得最初的问题是什么:

Office.initialize = function (reason) {
    jQuery(document).ready(function () {
        angular.bootstrap(document, ['app'])
    })
}

现在,我尝试编写<html ng-app="app">并且不使用上面的块(允许我延迟加载office.js)。到目前为止,加载项似乎也有效。

所以有人知道<html ng-app="app">方式是否存在Excel加载项的潜在风险? Office.initialize不是强制性的,对吧?

编辑1:我刚刚意识到它在所有情况下都不能正常运行,问题出在此处:Starting up an Excel add-in with ocLazyLoad failed in Excel for Windows

1 个答案:

答案 0 :(得分:1)

Office.initialize是强制性的。我解决这个问题的方式是这样的。

使用$routeProvider配置负载控制器到部分模板loading.html的映射。

$routeProvider.when('/',
{
    templateUrl: 'views/loading.html',
    controller: LoadController
}).when('/app',
{
    templateUrl: 'views/app.html',
    controller: AppController
});;

到目前为止,该块确保当您使用yourserver.org#/网址进行加载项的默认启动时,您将显示加载控制器。在你的负载控制器的html中,只需放一个微调器。因此,当您的应用加载,但office.js尚未初始化时,您将显示微调器。

现在,在您的LoadController中,您将初始化office.js并重定向到另一个局部视图。

function LoadController(/* Your dependencies */){
    Office.initialize = function() {
         window.location.hash = 'app';
    }
}
<{1>}在LoadController中,角度应用的'/'网址只显示加载程序。因此,您看到的第一个模板是加载模板 - 但您已经在角度应用中。当office.js初始化时,它只是指向实际体验。