javascript – 你能在Angular中转换成子指令吗?

我希望能够在我的应用程序中执行以下操作:
<pill-autocomplete>
  <pill-template>{{item.name}}</pill-template>
</pill-autocomplete>

其中,pill-autocomplete有一个模板可以转换成这样的子指令:

<pills ng-transclude="pillTemplate"></pills>
<input type="text">

鉴于ng-transclude创建范围和< pills>,似乎不可能.指令具有隔离范围.

我想到实现这一点的一种方法是在自动完成模板功能中注入药丸模板.问题在于它失去了翻译范围.我还必须在每个与药丸有相似行为的指令中这样做.

在角度1.x中有没有其他方法可以实现这一点?

解决方法

问题是,当您将药丸自动完成时的数据转换为药丸时,您已经删除了药丸内容.

该转换替换了指令模板下的内容,因此,指令模板中的内容根本无法加载,因为已被转换覆盖.

我的建议很简单,不直接使用带有ng-transclude的标签,使用内部div使指令可以加载其内容

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

  'use strict';

  var app =  angular.module('app');

  app.controller('testController',[
    function () {
      var vm = this;
      vm.name = 'Jimmy';
    }]);

  app.directive('pillAutocomplete',function () {
    return {
      priority: 100,restrict: 'E',transclude: true,template: '<pills><p>From Pill-Autocomplete</p><div ng-transclude><div></pills>'
    };
  });

  app.directive('pills',function () {
    return {
      restrict: 'E',link: function (scope,element,attrs) {
        scope.style = true;
      },template: '<p>Inside Pills</p><div ng-class="{pillscolor : style}" ng-transclude></div>'
    };
  });
.pillscolor{
  color: green;
  font-size: 20px;
  font-weight: bold;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<article ng-app="app">
<section ng-controller="testController as test">
 Controller scope - {{test.name}}
  <pill-autocomplete>
     From controller - {{test.name}}
  </pill-autocomplete>
</section>
</article>

相关文章

事件冒泡和事件捕获 起因:今天在封装一个bind函数的时候,发现el.addEventListener函数支持第三个参数...
js小数运算会出现精度问题 js number类型 JS 数字类型只有number类型,number类型相当于其他强类型语言...
什么是跨域 跨域 : 广义的跨域包含一下内容 : 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源...
@ &quot;TOC&quot; 常见对base64的认知(不完全正确) 首先对base64常见的认知,也是须知的必须有...
搞懂:MVVM模式和Vue中的MVVM模式 MVVM MVVM : 的缩写,说都能直接说出来 :模型, :视图, :视图模...
首先我们需要一个html代码的框架如下: 我们的目的是实现ul中的内容进行横向的一点一点滚动。ul中的内容...