【问题标题】:AngularJS and jQuery conflictAngularJS 和 jQuery 冲突
【发布时间】:2015-01-21 10:26:06
【问题描述】:

我用 AngularJs 和 jQuery 编写了一些代码。只有一件事有效,AngularJs 或 jQuery。

似乎 jQuery 和 AngularJs 相互冲突。一旦我包含这两个库,它们就不再正常工作了。如果我只包含其中一个(AngularJS 或 Jquery),那部分就可以了。

但我看不出问题出在哪里:...

 $(document).ready(function () {

        $('#Text').focus();
            $(document).on("mouseover", ".englishMtg", function () {
            var currentHref = $(this).attr("href");
            if (currentHref.indexOf("http") == -1) {
                var changedLink = currentHref.match(/[^\/?#]+(?=$|[?#])/);
                var englishSearchString = ".../query?q="+changedLink.toString().replace('.jpg', '').split(',')[0];
                $(this).attr("href", englishSearchString);
            }


        });

        $(document).on("mouseover", ".germanMtg", function () {
            var currentHref = $(this).attr("href");
            if (currentHref.indexOf("http") == -1) {
                var changedLink = currentHref.match(/[^\/?#]+(?=$|[?#])/);
                var germanSearchString = "http://..../query?q="+changedLink.toString().replace('.jpg', '').split(',')[1];
                $(this).attr("href", germanSearchString);
            }
        });

        $(document).on("mouseover", ".tumbailImage", function () {
            var currentHref = $(this).attr("src");
            var changedLink = currentHref.match(/[^\/?#]+(?=$|[?#])/);

            $(this).closest(".thumbnail").attr("title", changedLink.toString().replace('.jpg', '').split(',')[1]);

            //alert(changedLink.toString().replace('.jpg', '').split(',')[1]);
        });

    });

AngularJS(代码)部分:

    var app=angular.module('myApp', []);

function MyCtrl($scope) {

    $scope.currentPage = 0;
    $scope.pageSize = 18;
    $scope.data = ['...']; //some data

    $scope.numberOfPages=function(){
        return Math.ceil($scope.filtered.length / $scope.pageSize);
    }

}


app.filter('startFrom', function() {
    return function(input, start) {
        start = +start; //parse to int
        return input.slice(start);
    }
});

AngularJS(HTML 部分):

<div class="form-horizontal" ng-app="myApp" ng-controller="MyCtrl" ng-init="imageHeight=300;imageWidth=400">
<div class="form-group">
    <div class="col-md-12">
        <div class="panel-group col-md-12" id="accordion">
            <div class="panel panel-default">
                <div class="panel-heading">
                    <div class="panel-title">
                        <div style="text-align:center">
                            <button class="btn btn-default" ng-disabled="currentPage == 0" ng-click="currentPage=currentPage-1">
                                Previous
                            </button>
                            <a class="label label-default" style="font-size:large" data-toggle="collapse" data-parent="#accordion" href="#collapseOne"><span class="badge"> {{currentpage+1}}/{{numberOfPages()}} ({{filtered.length}} results)</span></a>
                            <button class="btn btn-default" ng-disabled="currentPage >= filtered.length/pageSize - 1" ng-click="currentPage=currentPage+1">
                                Next
                            </button>
                        </div>
                    </div>
                </div>
                <div id="collapseOne" class="panel-collapse collapse in">
                    <div class="panel-body">
                        <div class="input-group col-md-4">
                            <span class="input-group-addon editor-label">search</span>
                            <input type="text" class="form-control" placeholder="search" ng-model="searchImage">
                        </div>
                        <div class="input-group col-md-4">
                            <span class="input-group-addon editor-label">width</span>
                            <input type="text" class="form-control" placeholder="width" ng-model="imageWidth">
                            <span class="input-group-addon">px</span>
                        </div>
                        <div class="input-group col-md-4">
                            <span class="input-group-addon editor-label">height</span>
                            <input type="text" class="form-control" placeholder="height" ng-model="imageHeight">
                            <span class="input-group-addon">px</span>
                        </div>
                        <br />
                        <div class="clearfix"></div>
                        <div class="col-md-4 " ng-repeat="item in filtered = (data | filter: searchImage) | startFrom:currentPage*pageSize | limitTo:pageSize" style="overflow:auto">
                            <a href="{{item}}" title="{{item}}" target="_blank" class="germanMtg"><img src="~/Pictures/german.png" /></a>
                            <a href="{{item}}" title="{{item}}" target="_blank" class="englishMtg"><img src="~/Pictures/uk.png" /></a>
                            <a href="{{item}}" title="{{item}}" target="_blank" class="thumbnail"><img ng-src="{{item}}" class="tumbailImage" height="{{imageHeight}}" width="{{imageWidth}}"></a>

                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

即使我使用 jQuery 1.6(仅有时),我也会收到此错误:

Error: $scope.filtered is undefined MyCtrl/$scope.numberOfPages@http://localhost:5891/Scripts/Angular/JSONMtgs/jsonAngularJs.js:26200:9 _functionCall/<@http://localhost:5891/Scripts/Angular/Source/angular_1_0_3.js:6193:13 $interpolate/fn@http://localhost:5891/Scripts/Angular/Source/angular_1_0_3.js:4810:22 $RootScopeProvider/this.$get</Scope.prototype.$digest@http://localhost:5891/Scripts/Angular/Source/angular_1_0_3.js:7720:32 $RootScopeProvider/this.$get</Scope.prototype.$apply@http://localhost:5891/Scripts/Angular/Source/angular_1_0_3.js:7926:13 bootstrap/<@http://localhost:5891/Scripts/Angular/Source/angular_1_0_3.js:930:7 invoke@http://localhost:5891/Scripts/Angular/Source/angular_1_0_3.js:2802:1 bootstrap@http://localhost:5891/Scripts/Angular/Source/angular_1_0_3.js:928:1 angularInit@http://localhost:5891/Scripts/Angular/Source/angular_1_0_3.js:904:5 @http://localhost:5891/Scripts/Angular/Source/angular_1_0_3.js:14527:5 jQuery.Callbacks/fire@http://localhost:5891/Scripts/Jquery/jquery-1.10.2.js:3048:10 jQuery.Callbacks/self.fireWith@http://localhost:5891/Scripts/Jquery/jquery-1.10.2.js:3160:7 .ready@http://localhost:5891/Scripts/Jquery/jquery-1.10.2.js:433:1 completed@http://localhost:5891/Scripts/Jquery/jquery-1.10.2.js:104:4


return logFn.apply(console, args);

angular_1_0_3.js (Zeile 5582)

感谢您的帮助。

【问题讨论】:

  • 你需要在加载 AngularJS 之前加载 JQuery。
  • 我知道,但是 AngularJS 不再起作用了(只有 jquery 部分)...
  • 发布其余代码:完整的 html 页面...
  • 我更新了我最近的帖子
  • FULL html - 所以人们可以制作一个小提琴(或者更好的是,自己提供一个小提琴:jsfiddle.net)

标签: jquery angularjs


【解决方案1】:

jQuery 和 AngularJS 应该以透明的方式协同工作。如果 jQuery 在 AngularJS 之前加载,AngularJS 实际上会使用可用的 jQuery 而不是“迷你”内置 jQuery 克隆 (jqLit​​e)。

然而,FAQ (https://docs.angularjs.org/misc/faq) 中提到“Angular 1.3 仅支持 jQuery 2.1 或更高版本。jQuery 1.7 和更新版本可能与 Angular 一起正常工作,但我们不保证这一点。”。根据您的 Angular 和 jQuery 版本,这可能是您的问题的原因。

【讨论】:

    【解决方案2】:

    你应该在 angularJs 之前使用 jquery

    <script src="jquery.min.js"></script>
    <script src="angular.min.js"></script>
    <script src="kendo.all.min.js"></script>
    

    阅读这篇文章

    Which is the right way to add Jquery and Angularjs in one project

    【讨论】:

      【解决方案3】:

      是的,Angular 可以使用 jQuery,如果它在应用程序被引导时出现在你的应用程序中。如果 jQuery 不在您的脚本路径中,Angular 将回退到它自己的 jQuery 子集实现,我们称之为 jQLite。 Angular 1.3 仅支持 jQuery 2.1 或更高版本。 jQuery 1.7 和更新版本可能与 Angular 一起正常工作,但我们不保证这一点。

      我还建议您只使用 JQLite。它几乎具有 Jquery 中的功能。但如果你想使用 Jquery 而不是 Lite 版本,请在 Angular-Script 之前加载 Jquery。

      【讨论】:

        【解决方案4】:

        尝试 firebug 捕捉 JS/JQuery/AJS 的错误。 firebug 是 Mozilla Firefox 的一个插件,你应该已经安装了 firefox 的更新版本。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-11-16
          • 1970-01-01
          • 2018-02-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多