Javascript 角度1.5.0。当通过ocLazyLoad使用UI网格重新加载页面时,根模板是重复的$$animateJs未定义

Javascript 角度1.5.0。当通过ocLazyLoad使用UI网格重新加载页面时,根模板是重复的$$animateJs未定义,javascript,angularjs,angular-ui-grid,oclazyload,Javascript,Angularjs,Angular Ui Grid,Oclazyload,我正在使用: 角度,角度动画都是v。1.5.0 角度UI网格v。3.1.1 奥氏负荷v。1.0.9 角度ui路由器v。0.2.18 错误是: TypeError: $$animateJs is not a function at d (angular-animate.js:2141) at angular-animate.js:2131 at h (angular-animate.js:3174) at Array.d.push.fn (angular-ani

我正在使用:

  • 角度,角度动画都是v。1.5.0
  • 角度UI网格v。3.1.1
  • 奥氏负荷v。1.0.9
  • 角度ui路由器v。0.2.18
错误是

TypeError: $$animateJs is not a function
    at d (angular-animate.js:2141)
    at angular-animate.js:2131
    at h (angular-animate.js:3174)
    at Array.d.push.fn (angular-animate.js:3020)
    at c (angular-animate.js:423)
    at b (angular-animate.js:393)
    at angular-animate.js:3042
    at m.$digest (angular.js:16714)
    at m.$apply (angular.js:16928)
    at g (angular.js:11266)
当我刷新包含UI网格的页面时发生此错误

UI网格模块由ocLazyLoad加载


如果我将UI网格脚本放在中,所有工作都正常。就在我使用ocLazyLoad时。

其他页面工作正常。当我改变状态时,也可以正常工作。只有在提神的时候。
无论是F5还是Ctrl+F5

我所看到的最奇怪的事情是我的根模板被复制了

更新:

我已将项目示例上载到

因此初始状态为$state,不带网格

如果您在两种状态之间切换,一切正常。
但是如果您在网格状态下重新加载页面,或者使用网格将初始状态更改为状态,则整个模板将被复制。
原因是角度动画。如果将其关闭,一切正常。


谢谢

很高兴看到您的chrome开发工具的网络选项卡。我怀疑加载的顺序是“错误的”

通过查看ui.grid的一些代码,我实际上找到了一个以(可能太)动态方式检查ngAnimate的部分(在本例中):

现在,我不确定ui.grid为什么会摆弄动画,但我可以想象一些关于加载顺序的问题

编辑: 这是一个加载顺序错误。当使用ocLazyLoad加载ngAnimate并确保它在ui.grid之前加载时,它可以工作

假设您已将ngAnimate作为模块添加到LazyLoad中,您的状态解析必须更改为:

resolve: load(['ngAnimate', 'ui.grid', 'grid/GridController.js'])
当然这并不理想,因为在进入网格状态时加载时间会增加,但我现在太累了,无法进一步研究它。至少现在你知道这肯定和装货顺序有关

edit2: 另一种解决方案(如果您始终包括ngAnimate):

在router.config中,尝试以下加载功能

function load(srcs, callback) {
    return {
        deps: ['$$animateJS', '$ocLazyLoad', '$q',
                function ($$animateJS, $ocLazyLoad, $q) {
                    ...
        }]
    };
}

这就是为我解决的问题(基于JanS的回答)


你能发布相关的HTML和js吗?@CharlieS,我会尽力发布的tomorrow@CharlieS,请检查我的update@InsFi我的应用程序也有同样的问题!:原因可能是网格状态解析上的延迟模块加载,而不是动画上的延迟模块加载。试着像平常一样定义它,如果它有效的话,做下一步。延迟只加载控制器,然后同时加载ui网格和控制器。祝你好运!!JanS,我已将演示上传到github。如果你有时间,请检查一下。如果没有,我会把它贴出来。谢谢你发现了它。我确实像你说的那样:将
ngAnimate
添加到
load
中,但这并不能解决问题。当然,我可以从
正文中删除它,但我不能简单地这样做。因为另一个lib依赖于它(
ngAnimate
)。所以现在我的解决方案就是将
ui.grid
移动到
body
(我的意思是加载脚本而不加载
ocLazyLoad
),如果你不介意的话。我将等待另一个解决方案。如果情况更糟,甚至没有人,我会给予奖励
function load(srcs, callback) {
    return {
        deps: ['$$animateJS', '$ocLazyLoad', '$q',
                function ($$animateJS, $ocLazyLoad, $q) {
                    ...
        }]
    };
}
        .state('app.myroute', {
            url: '/my-route',
            title: 'My Route',
            controller: 'MyRouteController',
            controllerAs: 'myRoute',
            templateUrl: helper.basepath('my-route.html'),
            resolve : {
                ngAnimate : ['$$animateJs','$ocLazyLoad', function ($$animateJs, $ocLazyLoad) {
                    return $ocLazyLoad.load([
                        'vendor/angular-ui-grid/ui-grid.min.css',
                        'vendor/angular-ui-grid/ui-grid.min.js'
                    ])
                }]
            }
        })