在ng-repeat之后执行jQuery函数

时间:2013-03-03 08:47:47

标签: javascript jquery angularjs

提前感谢您的帮助。我在我的网络应用程序中使用此tagmanager。 jQuery函数工作FINE直到这个

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

置于

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

以下是代码的简短代码段

<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" />

它显示为正常输入而没有执行任何功能,例如在按下或输入后创建新标签。

谁能告诉我发生了什么?

1 个答案:

答案 0 :(得分:10)

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的自动初始化(类似$('<SELECTOR>').tagsManager();jQuery('<SELECTOR>').tagsManager();

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

<input tags-manager>

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

有道理吗?