博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Angular JS】正确调用JQuery与Angular JS脚本 - 修复Warning: Tired to load angular more than once...
阅读量:6788 次
发布时间:2019-06-26

本文共 1957 字,大约阅读时间需要 6 分钟。

  自己正在做一个小网站,使用Angular JS + Express JS + Mongo DB,在开发过程中,遇到一些问题,所以整理出来。希望对大家都有帮助。

  这是今天解决的一个问题,Angular JS抛出Warning: Tired to load angular more than once

  

  前端使用的就是Angular JS,同时前端脚本中我也使用了JQuery。以下是二者Script的最初调用顺序,

  在public文件夹下的index.html中:

1  2         
3 4 5
6 7 8 9 10 11

  JQuery的调用在前,Angular JS的调用在后。

  但是在页面调试过程中,我在Chrome Console中看到一条警告信息:

  

  而且,每当打开一个新页面,这个警告就会出现一次,说明每次Angular JS的脚本都会被再次Load一次

  

  当然不能允许这样的错误出现。

  于是开始Google资料,终于找到了问题所在的原因,原因是Angular JS框架使用了"轻量级的JQuery" - JqLite来处理页面,Jqlite是不会去执行样式页面(template)中的script脚本,也就是说,如果你只使用了Angular JS脚本,而没有用JQuery,在template html中写的<script></script>是不会被调用的(当然这里的<script>是指放在ng-view被Angular控制的情况下)。

  但是呢,如果你也使用了JQuery,而且关键的是,在Script调用顺序中,如果你把JQuery放在了Angular JS前面调用(例如本文开头时我的做法),Angular JS会检查是否有JQuery存在,如果JQuery存在,则不使用内部的JqLite,因此每次处理ng-view时,<script></script>都会被调用,由此就会抛出警告,每次Angular JS的脚本都会被重复加载,这是十分不可取的。

  

  因此解决方法是,

  把JQuery的调用仍旧放在Angular JS的前面,但是把脚本都放在ng-view的外面,例如放在<header>标签中,

  如下,

1    2      
3 4 5
6 7 8 9 10 11 12 13   

  这样的话,在每次处理ng-view时候,JQuery就不会执行里面的Script,从来不会导致Angular JS脚本被加载多次。

  

  当然,还有另外一个方法,就是把所有的script调用仍在<body>中,但将JQuery和Angular JS的顺序调整,将JQuery放在Angular JS下面调用。但这样不好,原因是Angular JS仍使用内部的JqLite,导致如果你想在Template Html中执行<script>变得不可能。

 

总结:

  在Google时,发现这个问题还是蛮多人遇到的。自己也花了很多时间,最后才找到根本原因。希望对大家有帮助。

  这个解决方法我也是Google得来,下次有空要去了解下Angular JS的源码,来验证下JqLite的具体情况。

  

参考:

  1. http://stackoverflow.com/questions/18220197/angularjs-does-not-load-scripts-within-ng-view

  2. http://stackoverflow.com/questions/27050158/warning-tried-to-load-angular-more-than-once-because-of-jquery-why

 

  

  最后附上我的GitHub地址,里面有这个问题描述,在Issue里面,感兴趣的朋友可以去看下,多提意见,谢谢。

  

                                          - Kevin Song

                                            2015-07-29

 

转载于:https://www.cnblogs.com/KevinSong/p/4686650.html

你可能感兴趣的文章
判断页数及切换
查看>>
GraphQL ---02 GraphQL和C#结合的实战项目
查看>>
Vmware虚拟机三种网络模式详解
查看>>
【已解决】如图,说我磁盘不够,看到var目录下有的个隐藏文件夹占了46G,不知道怎么删除...
查看>>
[LintCode] O(1)检测2的幂次
查看>>
BZOJ3295:[CQOI2011]动态逆序对——题解
查看>>
Office Online简介
查看>>
房天下爬虫
查看>>
常用Shell脚本命令(备忘)
查看>>
Python中的__init__,__call__
查看>>
如何设置Navicat的显示字体与字体大小?
查看>>
【转】HttpServlet详解
查看>>
项目 04 数据库迁移工具,增加用户系统-用户中心
查看>>
程序员小笑话
查看>>
DataTable AsEnumerable 的使用
查看>>
JS滚轮事件(mousewheel/DOMMouseScroll)了解
查看>>
GDI+与GDI屏幕抓图比较
查看>>
mysql中date_add()函数的使用?
查看>>
Window系统查找并关闭进程中的端口
查看>>
BZOJ2151种树——模拟费用流+链表+堆
查看>>