Javascript 参数';OSSCDETAILCTRACTRL';不是默认操作,在使用Firefox重新加载页面时未定义
我刷新页面时遇到了这个问题。这个问题只有在我使用Firefox作为浏览器时才会出现,而不是在我使用Chrome浏览器时。 有人能帮我解决这个问题吗 这是我的控制器的代码Javascript 参数';OSSCDETAILCTRACTRL';不是默认操作,在使用Firefox重新加载页面时未定义,javascript,angularjs,firefox,Javascript,Angularjs,Firefox,我刷新页面时遇到了这个问题。这个问题只有在我使用Firefox作为浏览器时才会出现,而不是在我使用Chrome浏览器时。 有人能帮我解决这个问题吗 这是我的控制器的代码 (function () { 'use strict'; angular.module('osscApp') .controller('osscDetailCtaCtrl', ['$stateParams', 'ctaSectionsServices','PropertiesServiceOs
(function () {
'use strict';
angular.module('osscApp')
.controller('osscDetailCtaCtrl',
['$stateParams', 'ctaSectionsServices','PropertiesServiceOssc', 'cityServicesOssc','shareDataServices',
function ( $stateParams, ctaSectionsServices, PropertiesServiceOssc, cityServicesOssc, shareDataServices ) {
var vm = this;
var apiCtaUrl = PropertiesServiceOssc.getUrl("urlOsscCtaApi");
vm.id = $stateParams.id;
var ctaDetailUrl = apiCtaUrl + vm.id + "/detail";
vm.url = apiCtaUrl;
vm.disabled = true;
vm.message = "";
vm.alertClass = "";
vm.data = {};
vm.filesCore = [];
vm.filesCentre = [];
vm.filesAuthority = [];
vm.filesCta = [];
var object = shareDataServices.get( vm.id + 'CTA' );
var eventId = object && object.eventId ? ( Array.isArray ( object.eventId ) ? 0 : object.eventId ) : 0;
vm.countries = [];
cityServicesOssc.getCountries( function ( response ){
if( response ){
vm.countries = response;
}
});
vm.memberStates = [];
cityServicesOssc.getMemberStates( function ( response ){
if( response ){
vm.memberStates = response;
}
});
vm.regions = [];
cityServicesOssc.getRegions( 117, function ( response ){
if( response ){
vm.regions = response;
}
});
ctaSectionsServices.getCta( ctaDetailUrl + "/" + eventId, function ( response, errors ){
if( response ){
vm.data = response;
}else{
vm.message = errors.message;
vm.alertClass = errors.alertClass;
}
});
}
]);
})();
这是一个浏览器控制台屏幕截图
它也应该发生在铬合金中 确保已将空依赖项添加到模块中
angular.module('osscApp',[])
经过彻底的研究,我找到了这个问题的原因和解决办法。在我的项目中,我通过ocLazyLoad和ui路由器使用惰性负载依赖关系来更改“app.js”中的状态。我注意到,在延迟加载中,库的加载顺序并不总是与定义的顺序相同,因此,如果控制器A在理论上使用服务B,那么应该加载服务B,最后加载控制器A。不幸的是,尽管依赖项是按正确的顺序声明的,但通常ocLazyLoad显然是按随机顺序加载的,因此有时先加载B服务,然后加载控制器(站点导航继续正确),有时先加载控制器(并运行它)然后B服务中断应用程序并在浏览器控制台中触发类似于上面所示的错误。第二种情况尤其发生在使用Firefox浏览器刷新页面时(每次刷新时,有时甚至在某些状态更改时)。为了解决这个问题,我声明了每个应用程序状态的依赖项,通过使用ocLazyLoad的参数“serie:true”强制它们串联加载。 以前的代码:
//the dependencies are loaded in random order on refresh state ( break the app)
$stateProvider.state('ossc.ctaDetail', {
url: '/clinicalTrial/:id/detail',
ncyBreadcrumb: {
label: '{{"DETAIL_CTA" | translate}}',
parent: 'ossc.searchCta'
},
views: {
'content': {
templateUrl: './modules/ossc/html/cta/osscDetailCta.html',
controller: 'osscDetailCtaCtrl',
controllerAs: 'ctaCtrl'
},
'menu': {
templateUrl: './modules/menu/html/menu.html',
controller: 'menuCtrl'
}
},
resolve: {
translate: ['RequireTranslations', function( RequireTranslations ){
RequireTranslations( translationCta, translationApp );
RequireTranslations( translationCta + '/'+ translationSelect , translationApp );
RequireTranslations( translationCta + '/'+ translationTitles , translationApp );
}],
'':['$ocLazyLoad', function ($ocLazyLoad){
return $ocLazyLoad.load({
name:'dependencies',
files:[
'modules/ossc/js/services/ctaSectionsServices.js',
'modules/ossc/js/services/propertiesServiceOssc.js',
'modules/ossc/js/services/shareDataServices.js',
'modules/ossc/js/controllers/cta/osscDetailCtaCtrl.js',
],
});
}]
}
})
通过的解决方案:
$stateProvider.state('ossc.ctaDetail', {
url: '/clinicalTrial/:id/detail',
ncyBreadcrumb: {
label: '{{"DETAIL_CTA" | translate}}',
parent: 'ossc.searchCta'
},
views: {
'content': {
templateUrl: './modules/ossc/html/cta/osscDetailCta.html',
controller: 'osscDetailCtaCtrl',
controllerAs: 'ctaCtrl'
},
'menu': {
templateUrl: './modules/menu/html/menu.html',
controller: 'menuCtrl'
}
},
resolve: {
translate: ['RequireTranslations', function( RequireTranslations ){
RequireTranslations( translationCta, translationApp );
RequireTranslations( translationCta + '/'+ translationSelect , translationApp );
RequireTranslations( translationCta + '/'+ translationTitles , translationApp );
}],
'':['$ocLazyLoad', function ($ocLazyLoad){
return $ocLazyLoad.load([
{
name:'dependencies',
files:[
'modules/ossc/js/services/ctaSectionsServices.js',
'modules/ossc/js/services/propertiesServiceOssc.js',
'modules/ossc/js/services/shareDataServices.js',
'modules/ossc/js/services/ctaSectionsServices.js',
],
serie:true,
},
{
name:'controller',
files:[
'modules/ossc/js/controllers/cta/osscDetailCtaCtrl.js',
],
serie:true,
}
]);
}]
}
})
我希望这个解决方案能帮助那些有我自己问题的人。这是你唯一引用的js文件吗?是的,引用这个控制器时出错。Chrome中不会发生这种情况。当您要定义新模块时,应该添加空的依赖项,而不是在这种情况下,因为此控制器是现有模块的一部分。您引用的模块“osscApp”在另一个js文件中使用所有依赖项正确定义。