强制 Angular 在 JQLite 上使用 jQuery

Posted

技术标签:

【中文标题】强制 Angular 在 JQLite 上使用 jQuery【英文标题】:Forcing angular to use jQuery over JQLite 【发布时间】:2020-11-11 23:56:41 【问题描述】:

根据角度文档 如果 jQuery 可用,则 angular.element 是 jQuery 函数的别名。如果 jQuery 不可用,则 angular.element 委托给 AngularJS 的内置 jQuery 子集,称为“jQuery lite”或 jqLit​​e。

我试图通过在 jQuery 之后加载 Angular 来。然而 angular.element 仍然是一个 JQLite 参考。下面是代码。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>
    </head>
    
    <body>
        <button onClick="load()">load</button>
        <button onClick="check()">check</button>
    </body>
    <script>
        function load() 
            var scriptElement = document.createElement("script");
            scriptElement.onload = function () 
                console.log("Successfully loaded script 2 using (onload).");
            ;
            scriptElement.src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js";
            document.head.appendChild(scriptElement);
        
        function check() 
            console.log(angular.element == jQuery) // false
        
    </script>
    
    </html>

如果我检查angular.element('div'),在加载完所有内容后也会出现 jQlite 错误,

angular.js:3236 Uncaught Error: [jqLite:nosel] http://errors.angularjs.org/1.6.9/jqLite/nosel
at angular.js:88
at Object.V [as element] (angular.js:3236)
at <anonymous>:1:9

这显然意味着 angular 指向 jQlite 而不是 jQuery。

我正在按照文档将角度指向 jQuery。我哪里错了?

【问题讨论】:

【参考方案1】:

就像在 html 元素上使用 ngJq 并为 jQuery 传递 window 变量一样简单。这将导致 angular 覆盖 jQlite 的使用

<!doctype html>
<html ng-app ng-jq="jQuery">
...
...
</html>

【讨论】:

以上是关于强制 Angular 在 JQLite 上使用 jQuery的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS中的jQuery - jqlite

angularjs DOM操作之jqLite篇

怎么在plsql中获取ebs的用户和职责

使用Angular JS将类添加到元素

angular 源码分析 1 - angularInit()

将BootstrapJS和AngularJS结合使用以及为啥不用jQuery