Javascript AngularJS与IE兼容模式
我有一个angularJS(AngularJSV1.3.0-beta.3)应用程序,它在IE10兼容模式下崩溃。它在FF、Chrome和IE11中工作良好。以下是我在console中得到的错误:Javascript AngularJS与IE兼容模式,javascript,angularjs,internet-explorer-10,ie8-compatibility-mode,Javascript,Angularjs,Internet Explorer 10,Ie8 Compatibility Mode,我有一个angularJS(AngularJSV1.3.0-beta.3)应用程序,它在IE10兼容模式下崩溃。它在FF、Chrome和IE11中工作良好。以下是我在console中得到的错误: Multiple directives [login, login] asking for 'login' controller on: <div> 多个指令[login,login]要求“登录”控制器: 要设置应用程序的状态,我创建一个节点: link: function ($scop
Multiple directives [login, login] asking for 'login' controller on: <div>
多个指令[login,login]要求“登录”控制器:
要设置应用程序的状态,我创建一个节点:
link: function ($scope, $element, $attrs) {
....
$element.html('<login></login>');
$compile($element.contents())($scope); // crash happens here
....
}
链接:函数($scope、$element、$attrs){
....
$element.html(“”);
$compile($element.contents())($scope);//这里发生崩溃
....
}
这是我的登录指令:
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);
});
}
};
}]);
widgets.directive('login',['$compile','$http','resourceLoader',function($compile,$http,resourceLoader){
返回{
限制:“AE”,
替换:正确,
模板:“”,
控制器:函数($scope$element){
$scope.user.isLogged=false;
$scope.user.password=未定义;
$scope.submitLogin=函数(){
//发送到服务器的代码
};
},
链接:函数($scope、$element、$attrs){
resourceLoader.get('templates'、'profile'、'unlogged/login'、'jquery.min',函数(模板){
$element.html(模板);
$compile($element.contents())($scope);
});
}
};
}]);
有什么想法吗?Thanx.主要问题是Angular 1.3不支持旧版本的Internet Explorer,更具体地说是IE8及以下版本。将IE10置于兼容模式将使浏览器在某些布局和功能上表现得如同旧浏览器一样。向后兼容性问题可能是罪魁祸首 Angular的建议是保留低于1.3的版本,以确保兼容性 参考文献:
有关这些问题的进一步阅读,请参阅并查看。您是否尝试过将指令限制从
EA
更改为仅E
,或者(可能更好的兼容性)仅A
,然后使用
html的解析方式似乎有点奇怪——我想它可能是在添加一个属性,以便自己在兼容性方面使用,这会把一切都搞砸
如果这不起作用,那么如果你提供一个弹弓或小提琴来更清楚地演示问题,你就更有可能得到正确的答案。添加这一行
if ( name === 'login' ) console.log(name, directiveFactory.toString());
在
如果它打印两次,则实际上是在加载指令两次。打印出directiveFactory的源代码后,您还将看到是同一个指令加载了两次还是两个同名指令。在分配模块名称的地方给出id=“ng app”/ng app=“module”。这将支持IE。在index.html的标题部分添加以下行解决了我的问题:
<meta http-equiv="x-ua-compatible" content="IE=edge">
有关详细信息:如何在index.html文件中初始化ng应用程序??window.onload=function(){angular.bootstrap(文档:[“myWidgets”);};你不是在使用style吗?我可以在IE8+上运行angularjs 1.2.1x。IE7不能,但我不在乎。@BKM,不,我不在乎。我必须支持由另一个程序员启动的应用程序。这是“与IE10兼容”模式,不起作用。andgular1.2.x也有同样的问题。请仔细阅读讨论…如果版本似乎不是问题,小提琴或plnkr可能会有所帮助。这对我来说是完美的解决方案!我添加了meta标签和DOCTYPE,什么都没有。。。这消除了所有模块错误。太棒了@sonu!非常感谢。