【问题标题】:AngularJS How to include a directive inside a template?AngularJS如何在模板中包含指令?
【发布时间】:2014-07-09 09:13:31
【问题描述】:

我正在尝试使用 AngularJS 中的指令编写一个可重用的组件。我遇到的问题是在我的可重用组件中,在模板中,我想使用 another 指令。然而,这个指令有一个require 属性,它会抛出一个错误,就好像它不符合要求一样,即使它不应该。 Here 是个笨蛋。

错误

找不到指令“inner”所需的控制器“div”!

指令

  directive('inner', function(){
    return {
      require: 'div',
      link: function (scope, elem, attrs){
        console.log('Inner Link');
      }
    }
  }).
  directive('outer', function($timeout){
    return {
      restrict: 'E',
      templateUrl: 'template.html',
      link:  function (scope, elem, attrs, ngModel){
        console.log('Outer Link')
      }
    }
  })

模板

<div>
  <div inner></div>
</div>

编辑

内部元素和 require 应该是 input,而不是 div

【问题讨论】:

  • div 应该在您的 require 中是什么?解释你的全部目标可能是值得的
  • 正如我在下面评论的,它实际上应该是input。我正在尝试做可重复使用的表单控件。

标签: javascript angularjs


【解决方案1】:

两个错误。

  1. require 采用所需的指令名称,而不是您附加的元素 至。
  2. outer 需要一个控制器,因为这是 inner 需要的。

Plunker:http://plnkr.co/edit/1epiLV1zjAlXlOodrkO3?p=preview

    angular.module('plunker', []).
      directive('inner', function(){
        return {
          require: '^outer',
          link: function (scope, elem, attrs){
            console.log('Inner Link');
          }
        }
      }).
      directive('outer', function($timeout){
        return {
          restrict: 'E',
          templateUrl: 'template.html',
          link:  function (scope, elem, attrs, ngModel){
            console.log('Outer Link')
          },
          controller: function() {

          }
        }
      });

【讨论】:

  • 是的,对不起。在我的代码中,我实际上使用了input。重要的部分是它似乎无法识别模板内的指令(在本例中为输入)。
  • 确实如此。检查 plunker 的控制台
  • @circuitlego 您再次在require 中添加了一个元素。换成outer。你甚至读过答案吗?
  • 它也没有控制器,这是require 期望找到的。也许您可以通过检查链接中的 element.localName 来限制。
猜你喜欢
  • 2012-11-18
  • 2015-09-13
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
  • 2015-12-17
相关资源
最近更新 更多