【问题标题】:executing jQuery function after ng-repeat在 ng-repeat 之后执行 jQuery 函数
【发布时间】:2013-03-03 08:47:46
【问题描述】:

提前感谢您的帮助。我在我的网络应用程序中使用了这个tagmanager。在此之前,jQuery 函数可以正常工作

<input type="text" name="tags" placeholder="Tags" class="tagsManager" />

放在

ng-repeat = "(key,val) in client_proj"

这是一个简短的sn-p代码

<div class="accordion-group" ng-repeat="(key,val) in client_proj"><!--For Every Project in Project List-->
  <div class="accordion-heading" style="background-color:#EFF8FB">
    <a class="accordion-toggle" data-toggle="collapse" data-parent="#mainAccordion" href="#{{val.id}}" ng-click="disableEditor()">
      <div align="center">{{val.title}}</div>
    </a>
  </div>
  <div id="{{val.id}}" class="accordion-body collapse">
    <div class="accordion-inner" style="font-size:12px; background-color:white">
      <strong>Technologies Exposure:</strong><br/>
      <div ng-hide="editorEnabled">{{val.exposure}}</div>
      <div ng-show="editorEnabled">
        <textarea ng-show="editorEnabled" class="span12" ng-model="val.exposure" rows="12" style="resize:vertical"></textarea>
        <input type="text" name="tags" placeholder="Tags" class="tagsManager" />

它显示为普通输入,不执行任何功能,例如在按下或回车后创建新标签。

谁能告诉我发生了什么?

【问题讨论】:

  • 我认为这是因为 jQuery 插件运行时 ng-repeat 的内容不存在。我的建议是您使用自定义指令。我觉得任何时候你需要编写特定的脚手架 html/css 指令更适合。您可以更好地控制渲染 + 行为
  • 这是否意味着我不能使用 jquery tagmanager 而是必须创建自己的?我很困惑。
  • 从建议的指令中初始化 jQuery 插件。

标签: javascript jquery angularjs


【解决方案1】:

1.创建一个自定义指令,作为 jQuery 插件的包装器:

angular.module('<YOUR APP OR MODULE>').directive('tagsManager', function () {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            element.tagsManager();
            //whatever other logic would go here
        }
    };
});

然后从您的脚本中删除 tabsManager 的自动初始化(类似于 $('&lt;SELECTOR&gt;').tagsManager();jQuery('&lt;SELECTOR&gt;').tagsManager();

最终,在您的 ng-repeat 中,将指令添加到输入元素(可选地添加其他属性——如果需要,您可能必须在指令中为这些属性编程行为)

<input tags-manager>

这将使 AngularJS 在您的输入(通过自定义指令)在 DOM 中呈现之后初始化 tabsManager。

有道理吗?

【讨论】:

  • 嘿!我想我开始明白你指的是什么了。让我试一试,看看是否成功。非常感谢朋友!
  • 确保按以下顺序包含脚本:jQuery、jQuery 插件、angular.js、app.js、...
  • 嘿,非常感谢!它就像一个魅力,我不需要进一步编程属性的行为。谢谢! =D
  • 酷。如果您确实遇到了尝试将更复杂的东西集成到 Angular 中的情况,那么指令代码就是您要扩展的代码。
  • 是的!为 html 创建指令的能力非常强大。最后一个问题,是否可以在自定义指令中动态更新值?因为我意识到对于标签管理器,我可能需要动态调用数据以将它们预加载到 element.tagsManager({ prefilled: [dynamic data]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 2014-12-11
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多