gpt4 book ai didi

angularjs - 优雅地处理 AngularJS 错误 : $injector:nomod Module Unavailable

转载 作者:行者123 更新时间:2023-12-03 06:28:36 28 4
gpt4 key购买 nike

我的 Angular 应用程序依赖于第三方 angular.service :

var app = angular.module("ninjaModule", ['angular-google-analytics']);

只要我的广告拦截插件关闭,应用程序就可以正常加载。但是,使用 Angular 上的广告拦截器会引发 $injector:nomod 错误,无法加载整个应用程序。

我正在寻找一种方法来优雅地处理这些错误,因此无论广告拦截器如何,都能够加载应用程序。如果 angular-google-analytics 不存在 - 好吧,这并不重要,我可以处理它或设置一些后备。但整个应用程序崩溃的情况对我来说不是一个选择。有什么想法吗?

准确地说 - 我不想绕过广告拦截器,例如通过重命名我的脚本文件。我期待一个有 Angular 的 try-catch 魔术。

骗子:http://plnkr.co/edit/sbEG6vclPidPSNGV5Bsa

最佳答案

我终于成功了。不过,该解决方案需要一些技巧:

  1. 检查 angular-google-analytics 是否已加载
  2. 动态为主模块准备依赖项列表 (deps)
  3. 显式使用 $injector 而不是 Analytics

尽管如此,我仍然需要配置 AnalyticsProvider,但使用 $injector 应该相对容易完成。

<小时/>
var deps = [];

try {
angular.module("angular-google-analytics"); // this throws if GA script is not loaded
deps.push('angular-google-analytics');
} catch(e){ console.error("GA not available", e); }

angular.module('mainApp', deps)
.run(function($rootScope, $injector) {
try {
Analytics = $injector.get('Analytics');
$rootScope.trackPage = function() {
console.log('Analytics in action!');
Analytics.trackPage();
}
} catch(e) {
$rootScope.trackPage = function(key, label) {
console.log("Fallback in action!")
}
}
})
.controller('MyCtrl', function($rootScope, $scope) {
$scope.message = 'Hello World!';
$rootScope.trackPage();
});

更新的插件:http://plnkr.co/edit/Zo4RgKOybzhvJQdW2nQZ?p=preview

关于angularjs - 优雅地处理 AngularJS 错误 : $injector:nomod Module Unavailable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32728753/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com