angularjs - 如何使用 ng-transclude 扩展 md-autocomplete? [在模板中非法使用 ngTransclude 指令!]

标签 angularjs angularjs-directive angular-material angularjs-ng-transclude

我正在尝试扩展 md-autocomplete通过将它包装在我自己的指令中,如下所示:

//..other directive code    
template: '<div><md-autocomplete ng-transclude=""></md-autocomplete></div>';
transclude: true;

希望我可以使用这个 HTML:

<my-custom-autocomplete>
    <span>{{item.name}}</span>
</my-custom-autocomplete>

所以我基本上追求的是当<my-custom-autocomplete>得到渲染最终代码变成这样:

<my-custom-autocomplete><div><md-autocomplete><span>{{item.name}}</span></md-autocomplete></div></my-custom-autocomplete>

<my-custom-autocomplete>里面的html代码将被包含在 <md-autocomplete> 之间指令。

不幸的是,这不起作用,我不断收到此错误:

angular.js:13550 Error: [ngTransclude:orphan] Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: <md-autocomplete ng-transclude="" tabindex="-1" class="ng-isolate-scope">

我的问题是:

  1. 我做错了什么?
  2. 如何从我的自定义指令中包含 HTML 并将其放在 <md-autocomplete> 之间渲染之前?

最佳答案

我遇到了同样的问题,经过大量修改后,我找到了一个可行的解决方案。 md-autocomplete 使用模板操作而不是 ng-transclusion 来设置内部内容。无论您将嵌入标签放在哪里,自动完成都会将它们删除,因为它将您的 html 完全重写为自动完成的 html。

事实证明,解决方案并不依赖于嵌入,而是使用 Angular 本身使用的相同类型的模板操作。

这是一个可行的解决方案:http://jsfiddle.net/Pluisjen/h3n1ch0f/

这里是选择覆盖 md-item-template 的关键:

template: function(elem, attr) { 
    getItemTemplateHtml = function() { return elem.find('md-item-template').html() || 'Default by directive' }
    return '<md-autocomplete layout-margin' +
                       'md-selected-item="first"' +
                       'md-items="i in firstOptions"' +
                       'md-min-length="0"' +                     
                       'md-item-text="i"' +
                       'ng-transclude' +
                       'placeholder="First">' +      
      '<md-item-template>' + getItemTemplateHtml() + '</md-item-template>' +
      '</md-autocomplete>'; },

关于angularjs - 如何使用 ng-transclude 扩展 md-autocomplete? [在模板中非法使用 ngTransclude 指令!],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37421786/

相关文章:

javascript - 如何向页面加载后创建的 div 添加监听器?

angularjs - 从一组编辑器中删除 tinymce 4 编辑器

javascript - 如何在 Angular js 中单击时调用自定义指令进行文件上传?

javascript - Angular Material md-contact-chips 回调问题

javascript - 使用 AngularJS 1.4 像 Replaceable Tiles 一样开发 Windows?

angularjs - AngularFire - 删除单个项目

angularjs - 特定元素中的 Angular Material Toast

css - 无法使元素的位置粘在垫子抽屉容器中

angularjs - AngularJS是功能性响应式(Reactive)编程吗?

javascript - 要求组件的指令 Controller 返回一个空 Controller