web-dev-qa-db-fra.com

AngularJS - ajoute ligne après élément dans la directive

Ma question est similaire à celle de celle-ci , mais au lieu d’ajouter une ligne au début, je souhaite l’ajouter.

Cela ne marche pas:

app.directive('createTable', function ($compile) {
  return {
    link: function (scope, element, attrs) {
      var contentTr = angular.element('<tr><td>test</td></tr>');
      contentTr.parentNode.insertBefore(element, contentTr.nextSibling);
      $compile(contentTr)(scope);
    }
  }
});
10
kuboslav

Cela fait le travail:

app.directive('createTable', function ($compile) {
    return {
        link: function(scope, element, attrs) {
            if (element.next().length) {
                element.next().insertBefore(element);
            }

            var contentTr = angular.element('<tr><td>test</td></tr>');
            contentTr.insertAfter(element);
            $compile(contentTr)(scope);
        }
    }
});

http://jsfiddle.net/3gt9J/3/

17
noj

Je pense que tu as besoin

app.directive('createTable', function ($compile) {
    return {
        link: function (scope, element, attrs) {
            var contentTr = angular.element('<tr><td>test</td></tr>');
            contentTr.insertAfter(element);
            $compile(contentTr)(scope);
        }
    }
});

Démo: Fiddle

3
Arun P Johny

Je voulais juste ajouter quelque chose parce que j'avais quelques minutes jusqu'à ce que cela fonctionne. Si vous n'avez pas jQuery dans votre projet, vous ne pouvez pas utiliser la variable insertAfter. Il suffit d'utiliser after() à partir de API jQuery .after ()

J'avais besoin d'ajouter quelques éléments dans ma directive entre d'autres enfants.

element.children().eq(0).after(angular.element('<p>Test</p>'));
0
NDY