参数'osscDetailCtaCtrl'不是aNaNunction,在使用Firefox重新加载页面时未定义

时间:2017-04-21 13:34:02

标签: javascript angularjs firefox

刷新页面时出现此问题。只有当我使用Firefox作为浏览器时才会出现此问题,而不是在我使用Chrome时。 有人可以帮我解决这个问题。

这是我的控制器的代码。

(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;
                    }
                });             
            }
        ]);
})();

这是一个浏览器控制台屏幕截图。

enter image description here

2 个答案:

答案 0 :(得分:0)

它也应该在chrome中发生,

确保将空的依赖项添加到模块中

 angular.module('osscApp',[])

答案 1 :(得分:0)

经过彻底的研究,我找到了原因并因此找到了解决这个问题的方法。在我的项目中,我通过ocLazyLoad和ui-router使用延迟加载依赖关系来改变我的“app.js”中的状态。我注意到,并不总是在延迟加载中,库的加载顺序与它们定义的顺序相同,因此如果控制器A理论上使用服务B,则应加载服务B,最后加载控制器A.不幸的是,尽管依赖关系以正确的顺序声明,但是ocLazyLoad通常以随机顺序加载它们,因此有时加载第一个B服务然后加载A控制器(并且网站导航继续正确),有时加载第一个控制器(并运行它)和然后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,
                                    }
                            ]);
                    }]
                }
            })

我希望这个解决方案可以帮助那些有自己问题的人。