警告:试图加载角度不止一次...因为jQuery ...为什么?

时间:2014-11-20 21:45:28

标签: javascript jquery angularjs

我试图了解这里发生了什么。警告是自我解释的,我意识到在应用程序中,使用下面的代码和结构,它运行ng-view两次('test'将在控制台中记录两次,所以当然角度加载两次! )....但为什么?

我已经阅读了我能找到的关于它的每一篇文章,似乎归结为jQuery在角度之前被加载。

如果我遗漏了jQuery或者如果我在angualr之后加载jQuery(这不是我理解的好习惯),没问题。我想让jQuery支持一些功能(特别是ui-sortable)。而且,虽然它似乎没有造成任何问题,但我不想让它运行我的ng-view两次。

我做了一些结构上错误的事情,还是我错过了解决这个问题的明显方法?

更新: Plunker of the issue(检查控制台)

的index.html:

<!DOCTYPE html>
<html lang="en" ng-app="myApp">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="description" content="">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Site Title</title>

</head>

<body ng-view>
<script type="text/javascript">
    console.log('test')
</script>

    <script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular-route.js"></script>
    <script type="text/javascript" src="app_simple.js"></script>
</body>
</html>

app_simple.js:

'use strict';

/**
 * Configure client module
 */
var myApp = angular.module('myApp', 
    [
      'ngRoute'
    ]);

myApp.config(function ($routeProvider) {
  $routeProvider
    .when('/simple', {
      templateUrl: 'components/simple/simple.html',
      controller: 'SimpleCtrl'
    })
    .otherwise({
        redirectTo: '/x'
    })
});

myApp.controller('SimpleCtrl', ['$scope', '$log', '$http', function($scope, $log, $http){

}]);

simple.html: 我的简单内容

2 个答案:

答案 0 :(得分:8)

好的,总结一下评论的帮助:

如果包含jQuery,则任何&lt; 脚本&gt;标签included WITHIN an ng-view will be evaluated twice。 (谢谢@lossleader!)。

我在测试中的错误假设是当我尝试将身体上的ng-view移动到&lt; div &gt;时,它正在处理整个模板内容两次。因为我看了两次日志消息。它不是!

<body>
<div ng-view>
<script>console.log('duplicated if jQuery');</script>
</div>
</body>

所以@Tom和@Wawy都有正确的解决方案。将ng-view移动到&lt; div &gt;或移动&lt; 脚本&gt;标签到&lt; head &gt; (在ng-view之外)。

答案 1 :(得分:0)

我有同样的问题,我通过在加载AngularJS之前加载JQuery来修复它 希望对你有用