【问题标题】:WARNING: Tried to load angular more than once. when I include JQuery警告:尝试多次加载角度。当我包含 JQuery
【发布时间】:2014-05-20 17:06:04
【问题描述】:

我正在构建一个带有角度生成器的 yeoman 应用程序。

我的 index.html 文件中包含的 js 库是:

<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/modernizr/modernizr.js"></script>
<script src="bower_components/angular/angular.js"></script>   
<script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
<script src="bower_components/d3/d3.js"></script>
<script src="bower_components/select2/select2.js"></script>
<script src="bower_components/angular-ui-select2/src/select2.js"></script>

只有在 before angular 中包含 jquery 时才会出现问题,如果在它之后则不会发生。

标题指出的问题是我在控制台中收到 “警告:尝试多次加载 angular”,并且应用程序无法初始化。

有人知道为什么会发生这种情况吗?

我有一个单一的 ng-app,我只包含了 angular 一次......以及所有内容。它看起来与配置无关,因为更改脚本的位置可以修复它。

你们有什么线索吗?

有谁知道我是否能够配置为包含脚本的顺序?当我使用 angular-generator 时,我已经使用 usemin 进行了设置,以包含 bower 脚本。我想知道是否有任何方法可以指定包含脚本的顺序。

这是我的项目的 bower.json 文件:

{
  "name": "<name>",
  "version": "0.0.0",
  "dependencies": {
    "angular": "1.2.15",
    "json3": "~3.2.6",
    "es5-shim": "~2.1.0",
    "angular-ui-router": "~0.2.10",
    "modernizr": "~2.8.1",
    "d3": "~3.4.6",
    "angular-ui-select2": "~0.0.5"
  },
  "devDependencies": {
    "angular-mocks": "1.2.15",
    "angular-scenario": "1.2.15"
  }
}

我试图在谷歌中搜索但没有运气。 提前致谢!

更新 1:

我刚刚发现,如果我以这种方式包含脚本,angular 将不会被包含两次,并且总是首先加载。

  <!-- build:js scripts/vendor.js -->
  <script src="bower_components/angular/angular.js"></script>
  <!-- bower:js -->
  <script src="bower_components/jquery/dist/jquery.js"></script>
  <script src="bower_components/modernizr/modernizr.js"></script>
  <script src="bower_components/angular-ui-router/release/angular-ui-router.js"></script>
  <script src="bower_components/d3/d3.js"></script>
  <script src="bower_components/select2/select2.js"></script>
  <script src="bower_components/angular-ui-select2/src/select2.js"></script>
  <!-- endbower -->

不是最好的解决方案,但至少目前是这样……无论如何,我希望将所有内容都包含在 bower:js 标记中。

【问题讨论】:

  • 我曾经遇到过同样的问题,它发生在使用 grunt build 构建后缩小时路由路径损坏时。这意味着应用程序一遍又一遍地调用根路径,因此 AJS 被一遍又一遍地加载。是否使用 JQuery 将任何内容附加到 DOM 可能导致此问题?
  • 一年后节省了我的一天;)订购解决方案适合我

标签: angularjs bower yeoman-generator-angular


【解决方案1】:

经过长时间的测试...最终在我的 index.html 文件中我有一个

<ui-view />

由 Angular ui 路由器使用并将其替换为此,成功了。

<ui-view></ui-view>

【讨论】:

  • 这只是解决了困扰我几个小时的问题。谢谢!我看到来自 jQuery 的无关调用试图重新加载已经加载的文件。它似乎是由使用自关闭 ui-view 标签、angular-ui-router 和 jquery 的组合引起的。
  • 那些不一样...检查stackoverflow.com/a/3558200/1049900“在 HTML 5 中, 表示 ,即开始标记。它不是“自闭合标记”。
  • 在我的例子中,我在body 标签内使用了ui-view 属性。我通过从body 中删除ui-view 并创建一个隔离的&lt;ui-view&gt;...&lt;/ui-view&gt;(如操作建议)解决了警告
【解决方案2】:

对我来说,这发生在我在路线中错误地引用了我的视图时。

我有:

.when('/route', {
      templateUrl: 'views/myPage.html',
      controller : 'myCtrl'
})

但我的观点被命名为views/mypage.html

错误消息不是我所期望的。我本来预计会出现缺少视图错误。

【讨论】:

  • 哇,我花了几个小时调试这么愚蠢的错误。当您有一个引用索引页面的 .otherwise("/") 语句(如果找不到 url,则默认路由)时,就会发生这种情况。谢谢吉姆
  • 我也遇到了同样的问题。
  • 但是当我使用节点服务器时,它在本地工作正常。谢谢。
  • 类似的事情 - 没有这样的模板导致这个错误。
【解决方案3】:

这在 .NET 和 MVC 5 中也发生在我身上,过了一会儿我意识到在标签中: 浏览器

再次包含在您身上的部分脚本中。为了解决服务器端的问题,我所做的是返回部分视图。比如:

public ActionResult Index()
{
    return View();
}

public ActionResult Login()
{
    return PartialView();
}

public ActionResult About()
{
    return PartialView();
}

【讨论】:

  • 这帮助我消除了错误。我正在为我的 templateURL 使用 ASP.NET 视图,而不是实际的静态 .html 文件,以便继续使用 razor。
【解决方案4】:

我收到了同样的警告,这是因为包含的文件的顺序以及使用的版本。

为了解决上述警告,我按以下顺序重新包含文件:

jquery.js
jqueryui.js
angular.js

注意:您必须在angularjs 之前添加jquery 脚本标签,以便angularjs 可以将jqLite 替换为jQuery

此外,我的代码正在使用AngularJS v1.2.0,但不适用于更高角度的版本。因此,还要检查您的 jquery 和 angularjs 版本兼容性。

【讨论】:

    【解决方案5】:

    是的,我通过在html页面中排序JS脚本顺序解决了我的问题。

    当把angular js脚本放在首位时,就不会再出现这种情况了。

    这很奇怪。

    谢谢。

    【讨论】:

      【解决方案6】:

      我在使用电子应用程序时遇到了类似的问题。 我在 index.html 页面中包含了 angular.min.js,每次我来到那个页面时,警告出现的次数都会变成双倍……比如 1、2、4、8、16 等。所以在 4/5 刷新之后,应用程序过去变得非常慢。 我找到的解决方案是.. 使用 require('./path/angular.min.js');

      而不是在 script 标签中包含 angular.min.js

      这只会加载文件一次。

      根据节点文档

      缓存 #

      模块在第一次加载后被缓存。这意味着(除其他外)每次调用 require('foo') 都将返回完全相同的对象,如果它会解析为同一个文件。

      多次调用 require('foo') 可能不会导致模块代码被多次执行。这是一个重要的特点。有了它,可以返回“部分完成”的对象,从而允许加载传递依赖,即使它们会导致循环。

      【讨论】:

        【解决方案7】:

        这是另一种情况,没有人涉及,但它会导致相同的问题,一开始可能并不明显:

        如果您使用 Gulp 或任何其他类似的工具和 angular-template-cache 插件并将所有代码合并到一个文件中,您需要确保在实际连接发生之前执行模板缓存生成,否则您的应用程序.min.js 没有模板缓存部分。

        Gulpfile 看起来像这样:

        var paths = {
          styles: 'assets/less/style.less',
          scripts: 'assets/js/**/*.js',
          templates: 'views/**/*.html'
        }
        
        function styles() {
          return gulp.src(paths.styles)
            .pipe(less())
            .pipe(cleanCSS())
            .pipe(gulp.dest('./assets/css/'));
        }
        
        function scripts() {
          return gulp.src(paths.scripts, { sourcemaps: true })
            .pipe(babel())
            .pipe(uglify())
            .pipe(concat('app.min.js'))
            .pipe(gulp.dest('./assets/js'));
        }
        
        function templatecache() {
          return gulp.src(paths.templates)
            .pipe(templateCache({ module: 'ams', root: '/views/'}))
            .pipe(gulp.dest('./assets/js'));
        }
        
        function clean() {
          return del(['assets/js/app.min.js', 'assets/js/templates.js', 'assets/css/style.css']);
        };
        
        var build = gulp.series(clean, templatecache, gulp.parallel(styles, scripts));
        

        关键部分是最后一行,clean 和 templatecache 先执行,然后是脚本和样式并行执行。我也在并行执行模板缓存,并进入了重复的 angularjs 警告。 希望它可以帮助某人。

        【讨论】:

          【解决方案8】:

          tools visual studio----只要像这样注释angularjs文件`

              <script src="~/Scripts/angular.min.js"></script>
          
          
          </section>`
          

          【讨论】:

          • 对此有何解释?
          • 当您尝试从多个来源加载它时会出现这种类型的警告,所以只需尝试从一个来源调用它..所以我建议评论它..我在 vs2013 项目中遇到了同样的问题现在它解决了.......
          猜你喜欢
          • 1970-01-01
          • 2014-06-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-09-12
          • 1970-01-01
          • 2015-05-18
          • 2015-01-18
          相关资源
          最近更新 更多