AngularJS和IE兼容模式
AngularJS and IE compatibility mode
我有一个angularJS(angularJS v1.3.0-beta.3)应用程序在IE10兼容模式下崩溃。它在FF, Chrome和IE11中工作良好。下面是我在控制台得到的错误:
Multiple directives [login, login] asking for 'login' controller on: <div>
设置应用程序的状态,我创建了一个节点:
link: function ($scope, $element, $attrs) {
....
$element.html('<login></login>');
$compile($element.contents())($scope); // crash happens here
....
}
这是我的登录指令:
widgets.directive('login', ['$compile', '$http', 'resourceLoader', function ($compile, $http, resourceLoader) {
return {
restrict: 'AE',
replace: true,
template: '<div></div>',
controller: function ($scope, $element) {
$scope.user.isLogged = false;
$scope.user.password = undefined;
$scope.submitLogin = function () {
// code that goes to server
};
},
link: function ($scope, $element, $attrs) {
resourceLoader.get('templates', 'profile', 'unlogged/login', 'jquery.min', function (template) {
$element.html(template);
$compile($element.contents())($scope);
});
}
};
}]);
任何想法?谢谢。
主要问题是Angular 1.3不支持旧版本的ie浏览器,更具体地说是IE8或更低版本。将IE10置于兼容模式将使浏览器在某些布局和功能上表现得像旧浏览器一样。向后兼容性问题可能是这里的罪魁祸首。
Angular的建议是保持在1.3以下的版本,以确保兼容性。
引用:
请参阅Angular关于1.3更新的帖子,并查看兼容性模式设置以进一步了解问题。
您是否尝试将指令限制从EA
更改为E
,或者(可能更好的兼容性)仅A
然后使用<div data-login="true"></div>
?
看起来html的解析方式有些奇怪——我想它可能是为了自己的兼容性添加了一个属性,这把一切都搞砸了。
如果这不起作用,如果你提供一个活塞或小提琴来更清楚地展示问题,你将更有可能得到正确的答案。
添加这一行
if ( name === 'login' ) console.log(name, directiveFactory.toString());
在这行
如果输出两次,说明你确实加载了两次指令。在打印出directiveFactory
的源代码后,您还将看到它是同一个指令加载了两次还是两个具有相同名称的指令。
给出id="ng-app",其中你分配你的模块名称ng-app="module"。
在index.html的header部分添加下面一行解决了我的问题:
<meta http-equiv="x-ua-compatible" content="IE=edge">
更多信息:https://stackoverflow.com/a/46489212/698127
相关文章:
- IE与Chrome的怪癖模式
- 将IE模拟模式从iframe覆盖到IE8
- 如何使用 JavaScript 或 PHP 将 IE 11 企业模式设置为标准模式
- 使用IE 10兼容模式使用Mxgraph旋转单元格
- 如何使Asp.net网站同时在IE 11(非可比模式)和IE 8中工作
- 应为']'在IE 8文档模式的正则表达式中:IE 8标准
- 自定义模式脚本 - Safari 和 IE 问题
- IE 是否进入睡眠模式
- 如何修复IE 9中的文档模式重启
- Javascript只能在IE Compat模式下工作
- 当我不在兼容模式下时,JQuery 在 IE 中表现得很奇怪
- 强制较旧的IE进入怪癖模式是不好的
- “函数声明不能嵌套在语句中” - IE 处于严格模式错误
- IE 文档模式兼容性
- 如何从IE和Chrome浏览器中的显示模式对话框窗口返回数组对象
- 使用 javascript 更改 IE 兼容模式
- 在 IE 11 的严格模式下,不允许将 AngularJS 分配给只读属性
- 如何在JSP中找到IE模式
- 检测显示器是否已从 IE 展台模式打开电源
- 检查用户是否正在使用具有兼容模式的IE