AngularJS错误[$ injector:unpr]未知提供者:在IE11中

时间:2017-10-23 14:13:04

标签: angularjs internet-explorer-11

我无法在谷歌找到帮助。

我是Angular的新手,我只在IE11及以下版本中遇到此错误。

我得到的错误是这样的: console error shown in IE

我的IE是葡萄牙语所以第一个错误的翻译是:它无法获得" getAttribute"的属性。未定义或为空

这是我的app.config.js文件



// Checking if an optional module is registered.
// If it's not, register an empty one to prevent errors.
(function(optDeps){
	optDeps.forEach(function(dep){
		try{
			angular.module(dep);
		}catch(e){
			angular.module(dep, []);
		}
	})
})(['ui.carousel', 'ui.mask', 'vAccordion', 'ngAnimate']);

angular

.module('poletto', [
	// Third party
	'smoothScroll',
	'ui.carousel',
	'ui.mask',
	'vAccordion',
	'ngAnimate',
	
	// Components
	'poletto.components',

	// Controllers
	'poletto.controllers',

	// Directives
	'poletto.directives',

	// Factories
	'poletto.factories',

	// Filters
	'poletto.filters',

	// Services
	'poletto.services'
])

.constant('CONSTANTS', {
	BASE_URL: document.currentScript.getAttribute('data-base-url')
})

.config(function($httpProvider){
	$httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
})

.config(function($locationProvider){
	if(window.history.pushState){
		$locationProvider.html5Mode({ enabled: true, requireBase: false, rewriteLinks: false });
	}
})

// Extending JQLite with a function that find nodes by className
.run(function(){
	angular.element.prototype.findBySelector = function(selector){
		var matches = [];
		
		for(key in this){
			// Pushing only HTMLElement's
			if(this[key].nodeType){
				// NodeList to array
				var results = Array.prototype.slice.call(this[key].querySelectorAll(selector));

				matches.push.apply(matches, results);
			}
		}

		return angular.element(matches);
	};
})




我搜索了谷歌并尝试了一些解决方案,例如:

  • 添加<meta http-equiv="X-UA-Compatible" content="IE=11" />

  • 将我的所有声明包装在:

(function (angular) { "use strict"; //code }(window.angular));

  • 在html标记中添加: <html lang="pt-br" xmlns:ng="http://angularjs.org">

  • 此外,我无法找到任何角度polyfill src /文件夹,我在角度2的类似问题中看到。

我不知道我应该放在哪里的文件,所以如果你需要更多信息,你可以问我,我更新问题。

谢谢!

2 个答案:

答案 0 :(得分:2)

不幸的是document.currentScript is not supported on IE并且无法填充,因此它不能这样做。也许,你可以在其他地方嵌入基本网址,或者可以在你的脚本中添加id并在旧学校的javascript中检索它。

<script id="main" data-base-url="https://my-api.com"></script>

然后像这样检索它:

var currentScript = document.getElementById('main');

在您的CONSTANTS提供商中,您可以执行以下操作:

.constant('CONSTANTS', {
    BASE_URL: document.getElementById('main').getAttribute('data-base-url')
})

答案 1 :(得分:2)

问题源于使用{1}},这在IE 11中是不受支持的,显然无法进行多层填充(至少很容易)。因此,您必须找到一种不同的方式来声明document.currentScript常量。