javascript - 如何以 Angular 向元素添加内部包装?

标签 javascript angularjs

我想要一个 Angular Directive(指令)来为 DOM 元素添加一个内部包装器。不幸的是,它不是包装而是替换元素的内部。 ( see plunker )

所以我有这个 html 片段:

<body ng-app="plunker">
  <div class="outer" wrapp-my-content>
    <label>Name: </label>
    <input type="text" ng-model="name" />
    <p>Hello {{name}}</p>
  </div>
</body>

指令应将其更改为

<body ng-app="plunker">
  <div class="outer" wrapp-my-content>
      <div class="inner-wrapper">
        <label>Name: </label>
        <input type="text" ng-model="name" />
        <p>Hello {{name}}</p>
      </div>
  </div>
</body>

但是我得到的是

<body ng-app="plunker">
  <div class="outer" wrapp-my-content>
      <div class="inner-wrapper">
      </div>
  </div>
</body>

指令代码:

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

app.directive('wrappMyContent', function() {
  return {
    restrict: 'A',
    transclude: true,
    replace: true,
    link: function(scope, element) {
      var innerWrapper = angular.element('<div class="inner-wrapper" ng-transclude></div>');
      element.prepend(innerWrapper);
    }
  }
});

我该如何解决?

最佳答案

您混淆了 ng-transclude 和自定义链接嵌入:

<强>1。使用指令的 template ( demo ):

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

//Recommended angular-way
app.directive('wrappMyContent', function() {
  return {
    restrict: 'A',
    transclude: true,
    template:'<div class="inner-wrapper" ng-transclude></div>',
    link: function(scope, element) {
    }
  }
});

<强>2。通过自定义链接嵌入 ( demo ):

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

//Equals transclude by your self
app.directive('wrappMyContent', function($compile) {
  return {
    restrict: 'A',
    scope:true,
    link: function(scope, element) {
      var innerContent = element.html();
      var innerWrapper = angular.element('<div class="inner-wrapper"></div>').append(innerContent);

      //Do compile work here.
      $compile(innerWrapper)(scope.$parent)
      element.empty().append(innerWrapper);

    }
  }
});

关于javascript - 如何以 Angular 向元素添加内部包装?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37428798/

相关文章:

javascript - Angular ng-options 复杂的 json 数组

JavaScript 删除确认框

javascript - 类和/或对象的视觉表示

angularjs - UI-Router 隐藏父模板

javascript - 如何在 angularjs 中单独将指令附加到 div

javascript - 如何在 angular.js 中将 $filter 与 select 一起使用

javascript - 如何在浏览器中禁用文本区域字段的智能引号?

javascript - 如何设置工具提示 z-index 大于剑道网格标题?

javascript - AngularJS 在指令中有很多监听器

javascript - nodejs `arguments` 是对象,但在浏览器中,它是一个 `array`