我无法在谷歌找到帮助。
我是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的类似问题中看到。
我不知道我应该放在哪里的文件,所以如果你需要更多信息,你可以问我,我更新问题。
谢谢!
答案 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
常量。