angularjs 高级玩法 创建递归的模板 兼容IE浏览器

来源:互联网 发布:c语言九九乘法表代码 编辑:程序博客网 时间:2024/05/17 18:43

说到兼容IE7 IE8浏览器,angularjs官方已经明确说明:v1.3 之后的版本(含v1.3)都将不支持 IE7 IE8了,所以如果想要兼容IE7 IE8 就必须使用 v1.3以下的版本


上一篇文章说到递归玩法,但是IE7 IE8是玩不通的,原理我简单解释一下,

angularjs在加载一个模板的时候,会进行解析内容,把内容转换成Element(元素或者说节点),这里问题就来了,在IE9+ 、chrome这些浏览器,会把 <script>这种标签也当作是一种Element来处理,但是在IE7 IE8则不会,因此,加载模板时,angularjs不会把script的内容放到$templateCache缓存中,而ng-include实际上就是在$templateCache缓存中取模板的,所以ng-include取不到script的内容,导致IE7 IE8没有显示我们想要的结果


解决办法:

既然问题已经知道,那么我们只要在ng-include获取$templateCache的script之前,往$templateCache插入一个递归的代码,那就解决了

$templateCache有两个方法我们可以用到,get 和 put,

$templateCache.get( key )

$templateCache.put( key, value )

我们可以在控制器中,调用$templateCache.put方法,把原本script的id作为key,script里面的内容作为value,传给$templateCache那就可以实现原本的递归功能了

0 0