【问题标题】:adding ng-repeat is causing Error: $compile:ctreq添加 ng-repeat 导致错误:$compile:ctreq
【发布时间】:2015-06-23 19:08:22
【问题描述】:

我有一个需要传单指令的自定义指令,以便我可以访问控制器:

restrict: 'E',
require: '^leaflet',
scope: {

},
template: "",
link: function(scope, element, attrs, controller) {

}

当我在应用程序的控制器中使用自定义指令而不实现 ng-repeat 时,它可以正常工作。像这样:

控制器的 HTML 没有 ng-repeat

<leaflet defaults="defaults" center="center" markers="markers" layers="layers" paths="paths">
  <ng-include src="/markers.html" />
  <my-directive 
    waypoints="wps">
  </my-directive>
</leaflet>

没有ng-repeat的控制器的JS

$scope.wps = [[32.745,-117.2776],[32.693,-117.3188]];

但是,当我尝试添加 ng-repeat 时,我最终收到以下错误:

Error: [$compile:ctreq] http://errors.angularjs.org/1.3.12/$compile/ctreq?p0=leaflet&p1=myDirective

带有ng-repeat的控制器HTML

    <leaflet defaults="defaults" center="center" markers="markers" layers="layers" paths="paths">
        <ng-include src="/markers.html" />
        <my-directive 
            ng-repeat="(name, data) in routes"
            name="{{ name }}"
            waypoints="data.wps">
        </my-directive>
    </leaflet>

带有ng-repeat的控制器的JS

$scope.routes = {
  r1: {
    wps: [[32.745,-117.2776],[32.693,-117.3188]]
  }
}

我搞砸了什么?

【问题讨论】:

  • 我认为这是因为 ng-repeat 创建了一个新范围。您需要将传单对象作为参数传递
  • 当您使用ng-repeat 时,会为每一行创建一个新范围,并且由于您的子指令创建了隔离范围,因此父层次结构会受到影响。由于您的孩子在父指令控制器上执行了require,因此可能会出现此问题。
  • @aorfevre 将传单对象作为参数传递是什么意思?我会在哪里做呢?
  • 我很确定错误在于您未显示的代码。没有理由这不应该工作。
  • 我在代码中删除了一行。我更新了问题。

标签: javascript angularjs angularjs-directive angular-leaflet-directive


【解决方案1】:

您的指令前有&lt;ng-include src="/markers.html" /&gt;。您需要明确关闭该标签。见this bug report

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 2013-01-08
    • 2014-07-31
    • 2014-05-02
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    相关资源
    最近更新 更多