angularjs ng-option ie issue解决方案

news/2024/7/24 13:34:50 标签: javascript

最近遇见angularjs 在IE上当使用ng-options作为select的选项数据源,并且被套在ng-switch(ng-transclude)之类的,当angular上得ng-options数据源model改变后,在IE上并不渲染。

在一阵的测试和阅读相关文档后最后确认为:因为ng-switch(ng-transclude)是为了使其scope为原来的父scope,在父scope上生成了DOM后才克隆(cloneNode)到指定的指令位置。然而IE在对于select克隆的节点,不会主动去触发重绘,所以才有了上面的issue。

问题确定了,那我们所需要做的就是手动的去触发让IE对Select重绘,尝试了很多办法后最终确认有效的是:首先在options上用原生js去添加一个option,在马上移除掉这个option,所以解决方案如下:

javascript" style="font-size:1em;">
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">angular.module( javascript string" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:#0000FF;">'ie.select' javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">, [])
 
javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">.directive( javascript string" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:#0000FF;">'ieSelectFix' javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">, [
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">     javascript keyword" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,255);">function  javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">() {
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">         javascript keyword" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,255);">return  javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">{
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">             javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">restrict:  javascript string" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:#0000FF;">'A' javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">,
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">             javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">require:  javascript string" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:#0000FF;">'select' javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">,
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">             javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">link:  javascript keyword" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,255);">function  javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">(scope, element, attributes) {
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">                 javascript keyword" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,255);">var  javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">isIE = document.attachEvent;
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">                 javascript keyword" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,255);">if  javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">(!isIE)  javascript keyword" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,255);">return javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">;
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">  
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">                 javascript keyword" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,255);">var  javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">control = element[0];
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">                 javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">scope.$watch(attributes.ieSelectFix,  javascript keyword" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,255);">function  javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">() {
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">                     javascript comments" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,130,0);">//it should be use javascript way, not jquery way.
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">                     javascript keyword" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,255);">var  javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">option = document.createElement( javascript string" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:#0000FF;">"option" javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">);
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">                     javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">control.add(option,  javascript keyword" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,255);">null javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">);
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">                     javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">control.remove(control.options.length - 1);
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">                 javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">});
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">             javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">}
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">         javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">}
 
javascript spaces" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;">     javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">}
 
javascript plain" style="font-family:Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;background:none;border:0px;line-height:1.8em;vertical-align:baseline;color:rgb(0,0,0);">]);

  

使用方式如下:

1
2
3
4
5
6
7
< select  ie-select-fix="options" ng-model="demos" class="form-control"
 
         ng-options="currOption.value as currOption.text for currOption in options">
 
     < option  value="" default>Select</ option >
 
</ select >

  

我也在我的github专门创建了一个针对angularjs在IE上issue的项目,收录了这个指令,在后续也会加入我所遇见的angularjs关于ie的issue,也希望大家帮助完善这个项目,让我们的angularjs程序在IE工作的更美好,让我们这些辛苦的程序猿也少一点加班时间,多一点陪家人,泡咖啡的时间。哈哈。

github项目地址:https://github.com/greengerong/angular-ie-enhancer


本文转自破狼博客园博客,原文链接:http://www.cnblogs.com/whitewolf/p/3464053.html,如需转载请自行联系原作者


http://www.niftyadmin.cn/n/497718.html

相关文章

C#winform界面中如何显示当前时间,是用lable控件实现

private void Form1_Load(object sender, EventArgs e) { Thread t new Thread(delegate() { while (true) { Invoke(new EventHandler( delegate { label1.Text DateTime.Now.ToLongTimeString(); })); Thread.Sleep(500); } }); t.IsBackground false; t.Start(); } 放在l…

Tomcat多站点部署及集成到IntelliJ IDEA

Tomcat是Java最常用的Web容器&#xff0c;作为服务端部署的一款轻量级工具&#xff0c;使用非常广泛&#xff0c;这里了简单记录下Tomcat的基础是的使用。 Tomcat的安装和使用就不赘述了&#xff0c;网上很多教程&#xff0c;主要介绍下&#xff1a; 如何通过Tomcat进行多站点的…

C# 测试SQL数据库连接时 winform 界面如何实时刷新控件

vs2010下C#Winform程序&#xff1a; 我想实现的功能是&#xff0c;点击“测试数据库连接”按钮&#xff0c;在界面上&#xff0c;显示进度条&#xff0c;或者显示一个Label内容是倒计时读秒。 所用的方法一&#xff1a;添加控件timer&#xff1a; System0.Windows.Forms.Timer…

闲谈简单设计(KISS)疑惑

忙碌了一年了项目又到了交付了&#xff0c;虽然项目能成功上线&#xff08;因为还有维护支持的团队&#xff09;。但是个人从技术上看&#xff0c;这是一个不那么成功的项目&#xff0c;因为后期艰难的修复bug,添加feature。这与简单设计有什么关系呢&#xff1f;在某模块开发起…

WinForm自定义的MessageBox介绍

简单测试了一下&#xff0c;觉得还是比MS自带的要好一点&#xff0c;新建一个项目&#xff0c;添加一个MyMsgBox的窗体&#xff0c;该窗体里面的代码如下&#xff1a; 完整的Demo&#xff1a;files.cnblogs.com/allen0118/MsgBox.7z privatevoidbutton1_Click(objectsender, E…

weblogic 的应用 常见问题处理 db2 链接不上(转载)

xingkaistart weblogic10之Failed to initialize the application wss-1-1 due to error weblogic. WeblogicJDBC错误信息&#xff1a;&#xff08;wss-1-1 是配置的jndi&#xff09; <Jan 14, 2011 3:42:09 PM CST> <Error> <Deployer> <BEA-149205> …

C#程序反编译教程

工具: 1. de4dot - 脱壳工具 2. NET.Reflector Pro - C#IL源码查看器 流程: 1. 查看是否加壳 用NET.Reflector Pro打开程序, 如下图, 第一个红框是[傲视天下]的更新程序, 可以看出没加壳, 第二个红框是[有好米域名注册]的主程序, 加了壳的 2. 脱壳, [可选(有壳才脱)] 进入…

C#图片处理之:图片缩放和剪裁

2008-09-05 11:52 C#图片处理之:图片缩放和剪裁 其实在GDI中&#xff0c;缩放和剪裁可以看作同一个操作&#xff0c;无非就是原始区域的选择不同罢了。空口无凭&#xff0c;先看具体算法可能更好理解。 /// <summary> /// Resize图片 /// </summary&g…