无法在包含内容中找到指令所需的Angularjs控制器

罗恩·史密斯

最近我使用angular开发了一个指令,有一个指令像ng-repeat来生成一些记录,我使用了transclude来实现它。但是它引发了一个错误,即“找不到指令'bSpan'所需的控制器'aArea'!”。

1. ModuleA代码

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

    moduleA.directive("aArea", function () {
        return {
            restrict: 'E',
            transclude:'element',
            scope: {
                amount:"="
            },
            template: '<div id=\"cc\" ng-transclude></div>',
            controller: function ($scope,$element,$attrs) {
                this.getData = function (data) {
                    return data + " is ok";
                }
            },
            compile: function (tElement, attrs, linker) {
                var parentElement = tElement.parent();

                return {
                    pre: function () {

                    },
                    post: function (scope) {
                        linker(scope.$parent,function (clone,scope) {
                            parentElement.append(clone);
                        });
                        linker(scope.$parent, function (clone, scope) {
                            parentElement.append(clone);
                        });
                        linker(scope.$parent, function (clone, scope) {
                            parentElement.append(clone);
                        });
                    }
                }
            }
        }
    });

   moduleA.directive("bSpan", function () {
        return {
            restrict: 'E',
            scope: {
                data: "=",
            },
            template: '<span style=\"background-color:gray;color:orange\">{{data}}</span>',
            require: "^aArea",
            link: function ($scope, $element, $attrs, controller) {
                var data = "abc";
            }
        }
    });

2. ModuleB代码

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

    moduleB.directive("myItem", function () {
        return {
            restrict: 'E',
            scope: {
                item: "=",
                itemTemplate: '='
            },
            priority: 1000,
            terminal:false,
            template: '<ng-include src=\"itemTemplate\"/>',
            controller: function ($scope, $element, $attrs) {
                var data = "";
            }
        }
    })

3. ModuleC代码

    var moduleC = angular.module("moduleC", ["moduleA", "moduleB"]);
    moduleC.controller("Ctr", function ($scope) {
        $scope.item = {};
        $scope.item.dataAmount = 1000;
        $scope.item.templateUrl = "item-template.html";
    })

4. HTML代码

<body>
<div ng-app="moduleC">
    <div ng-controller="Ctr">
        <a-area>
            <my-item item="item" item-template="item.templateUrl"></my-item>
        </a-area>
    </div>
</div>
</body>

5.模板代码

<div>
    <span style="display:block">hello every one</span>
    <b-span data="item.dataAmount"></b-span>
</div>
新开发者

您不应使用该函数的transclude函数(已调用linkercompile-已过时。

$compile 文档

注意:transclude不建议使用传递给compile函数的函数,因为它例如不知道正确的外部作用域。请改用传递给link函数的transclude函数。

遵循此指南(以及其他一些较小的更改),请aArea按如下所示更改指令:

compile: function(tElement, tAttrs) {
  // don't use the template element 
  //var parentElement = tElement.parent();

  return function(scope, element, attrs, ctrls, transclude) {
      transclude(function(clone, scope) {
        element.after(clone);
      });
      transclude(function(clone, scope) {
        element.after(clone);
      });
      transclude(function(clone, scope) {
        element.after(clone);
      });
  };
}

实际上,您甚至根本不需要该transclude功能,也不需要这样做transclude: "element"您可以更改为模板transclude: true<div ng-transclude>在模板中使用3次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AngularJS-指令无法访问所需的祖先控制器

来自分类Dev

找不到指令“ ngSwitchWhen”所需的AngularJS控制器“ ngSwitch”

来自分类Dev

AngularJS:将所需的指令控制器注入控制器,而不是链接函数

来自分类Dev

AngularJS:将所需的指令控制器注入控制器,而不是链接函数

来自分类Dev

AngularJS-指令无法识别控制器

来自分类Dev

AngularJS:无法解析指令控制器中的服务

来自分类Dev

无法从指令到控制器进行通信。AngularJS 1.6

来自分类Dev

AngularJS错误:指令“ drawing”所需的控制器“ drawing”找不到

来自分类Dev

AngularJS指令到指令通信抛出未找到控制器的错误

来自分类Dev

Angular指令-需要从指令控制器访问所需的控制器

来自分类Dev

AngularJS指令控制器和要求

来自分类Dev

AngularJS:从控制器访问指令数据

来自分类Dev

angularjs:从指令广播到控制器

来自分类Dev

angularjs:指令的访问控制器

来自分类Dev

AngularJS在指令之间共享控制器

来自分类Dev

AngularJS:从指令调用控制器事件

来自分类Dev

如何模拟AngularJS指令的控制器

来自分类Dev

AngularJS-指令与控制器

来自分类Dev

控制器之前的AngularJS指令事件

来自分类Dev

AngularJS控制器函数与指令函数

来自分类Dev

AngularJS指令调用控制器功能

来自分类Dev

AngularJS-从控制器刷新指令

来自分类Dev

从控制器调用angularjs指令函数

来自分类Dev

angularjs:从指令广播到控制器

来自分类Dev

控制器之前的AngularJS指令事件

来自分类Dev

在AngularJS的指令中使用控制器

来自分类Dev

AngularJS中的控制器/指令继承

来自分类Dev

AngularJS指令调用控制器功能

来自分类Dev

AngularJS中指令与控制器的交互

Related 相关文章

热门标签

归档