【问题标题】:Angular directive require on the same elementAngular 指令要求在同一个元素上
【发布时间】:2017-09-05 16:50:57
【问题描述】:

您好,您尝试对同一元素进行要求。根据角度文档,这是可能的。

一个 ^ 前缀将使指令自行查找控制器 元素或其父元素;没有任何前缀,该指令看起来 仅在其自己的元素上。

按照说明。我有两个指令,myD 和 myC...希望能够从 myC 的链接 ctrl 属性访问 myD。

我已包含指向我的 codepen 示例的链接。

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


app.directive("myD", function() {
   return {
      restrict : "E",
      template : "<b>myd</d>"
   }
});

app.directive("myC", function() {
   return {
      require : "myD",
      restrict : "A",
      link : function (scope, attr, ele, ctrl) {
         alert(JSON.stringify(ctrl));
      }
   }

});

<div ng-app="app">
   <my-d my-c></my-d>
</div>

http://codepen.io/mantisimo/pen/KWOxeg

得到以下错误:

错误:[$compile:ctreq] 控制器“myD”,指令“myC”需要, 找不到!

【问题讨论】:

  • 将控制器:function(){} 放入指令myD?
  • 谢谢你......真的只是想通了! :-)

标签: angularjs angularjs-directive


【解决方案1】:

当您使用require 时,您要求 Angular 注入所需元素的控制器。在您的情况下,控制器未定义。

错误出现在myD 中,您需要在其中声明控制器。

app.directive("myD", function() {
   return {
      restrict : "E",
      template : "<b>myd</d>",
      controller: function(){}
   }
});

【讨论】:

  • 两秒前才想到...有趣的是,当您定义问题时,您会看到问题...感谢您的快速响应。
  • 希望能给别人一些痛苦:)
  • @Mantisimo 下次用塑料鸭子 ;-)
  • @Mantisimo 如果你使用组件而不是控制器,那么每个docs.angularjs.org/guide/…中都会声明一个默认控制器
  • 如果不使用链接也不使用编译功能,建议使用组件
猜你喜欢
  • 2021-08-07
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 2017-02-08
  • 2021-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多