【问题标题】:Could angular.js cause another jQuery plugin not to fire and produce no errors in the console?angular.js 会导致另一个 jQuery 插件不触发并且在控制台中不产生错误吗?
【发布时间】:2015-01-15 02:45:43
【问题描述】:

因为时间是一个因素,我无法在我的项目中“以角度方式”安装 MixItUp.js。 话虽如此,我只是像入门页面状态上的文档一样将其连接起来;只是一个纯粹的 jQuery 安装。但很可惜,什么都没有。控制台中甚至没有错误。我想知道我做错了什么?

这里是登台链接site.

下面是脚本在我的 HTML 中的标记方式。

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="http://cdn.jsdelivr.net/jquery.mixitup/latest/jquery.mixitup.min.js"></script>
<script>
var $j = jQuery.noConflict();

$j(function() {
    $j('#Container').mixItUp();

});
</script>
<script src="js/app.js"></script>

2014 年 11 月 18 日更新

新的 HTML 标记

<div mix-it-up id="Container" class="container">
    <div class="mix category-1" data-myorder="1"></div>
    <div class="mix category-1" data-myorder="2"></div>
    <div class="mix category-1" data-myorder="3"></div>
    <div class="mix category-2" data-myorder="4"></div>
    <div class="mix category-1" data-myorder="5"></div>
    <div class="mix category-1" data-myorder="6"></div>
    <div class="mix category-2" data-myorder="7"></div>
    <div class="mix category-2" data-myorder="8"></div>

    <div class="gap"></div>
    <div class="gap"></div>
</div>

【问题讨论】:

    标签: javascript jquery html angularjs


    【解决方案1】:

    这是因为您在 #container 上启动 MixItUp 的脚本在您的 ng-view 的内容有机会呈现之前运行,因此 DOM 中尚不存在 ID 为 container 的元素。

    这是你别无选择的地方,只能从一开始就使用指令“以 Angular 方式”做事,即

    HTML

    <div mix-it-up id="Container" class="container"></div>
    

    JS

    .directive('mixItUp', function () {
      var directive = {
        restrict: 'A',
        link: link
      };
    
      return directive;
    
      function link (scope, element, attrs) {
        $(element).mixItUp();
      }
    });
    

    【讨论】:

    • 非常感谢,但是现在我收到undefined is not a function 错误?只是仔细检查我的标记是否正确? (见上面的更新)。
    • 在链接函数中放置一个断点,您会注意到$(jQuery 的常用别名)在此上下文中未定义。您需要使用 noConflict 引用 jQuery 而不是 $
    • 太棒了,成功了!但是,当我跳出页面并返回时,插件停止触发......但是当您进行刷新时,它会触发并完美运行!有什么我想念的吗?
    • MixItUp 保留其实例的内部寄存器,因此这可以防止它再次在匹配元素上被初始化。与大多数 jQuery 插件一样,您需要在指令中使用 do some clean up。在链接函数中,添加element.on('$destroy', function () { element.mixItUp('destroy'); });。这基本上是说,当元素为 $destroyed(从视图中删除)时,从 MixItUp 的寄存器中删除此实例。
    • 非常感谢,成功了。你知道在这种情况下如何使用 Angular 和 jQuery 的好资源吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 2012-07-17
    • 2018-03-28
    • 2020-06-12
    • 2013-04-13
    相关资源
    最近更新 更多