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'
])
}]
}
})