【问题标题】:AngularJS 1.2.1 - dynamically adding directives errors unless they do not replace source elementAngularJS 1.2.1 - 动态添加指令错误,除非它们不替换源元素
【发布时间】:2014-03-10 21:36:34
【问题描述】:

我已将我的应用程序升级到 AngularJS 1.2.1,但我遇到了以前工作代码的问题,我无法解决。

我有一个页面,用户从预定义的内容列表中构建内容,每个内容都是一个单独的 AngularJS 指令。我有一个存储配置项目数组的服务,并将其链接到 ng-repeat 命令。当用户选择添加新项目时,我所做的就是将其推送到数组中,然后由 Angular 来更新 UI。我的 HTML 与此类似。

<div data-ng-repeat="item in configuration">
    <directive-a data-ng-if="item.obj === 'directive-a'></directive-a>
    <directive-b data-ng-if="item.obj === 'directive-b'></directive-b>
    <directive-c data-ng-if="item.obj === 'directive-c'></directive-c>
    <directive-d data-ng-if="item.obj === 'directive-d'></directive-d>
</div>

这里的所有指令都继承了父作用域,并且它们都非常简单。

angular.module("App").directive("directiveA", function () {
    return {
        restrict: "E",
        replace: true,
        templateUrl: "partials/DriectiveA.html"
    };
});

当我将它们设置为替换“真”时,在将它们添加到数组时控制台中出现以下错误并且项目不呈现:

TypeError: undefined is not a function
    at ngRepeatAction (file:///C:/TeamFoundation/PRE/js/libs/angular-1.2.1.js:18826:15)
    at Object.$watchCollectionAction [as fn] (file:///C:/TeamFoundation/PRE/js/libs/angular-1.2.1.js:11347:11)
    at Scope.$digest (file:///C:/TeamFoundation/PRE/js/libs/angular-1.2.1.js:11443:27)
    at Scope.$apply (file:///C:/TeamFoundation/PRE/js/libs/angular-1.2.1.js:11682:24)
    at HTMLDivElement.<anonymous> (file:///C:/TeamFoundation/PRE/js/libs/angular-1.2.1.js:17531:21)
    at HTMLDivElement.jQuery.event.dispatch (file:///C:/TeamFoundation/PRE/js/libs/jQuery-1.8.2.js:3063:34)
    at HTMLDivElement.elemData.handle.eventHandle (file:///C:/TeamFoundation/PRE/js/libs/jQuery-1.8.2.js:2681:47)

第 9101 行,它位于“consoleLog”函数中,因此它似乎无法将某些内容写入控制台,失败了,但无论如何都设法在那里写入错误!我已经尝试过调试它,但实际上无法做到。

当我将它们设置为替换“假”时,它工作正常。我希望他们替换源元素,否则由于额外的元素,格式化是一个真正的痛苦,并且能够在升级之前这样做。

有人可以在这里提供任何建议吗?

【问题讨论】:

    标签: angularjs angularjs-directive


    【解决方案1】:

    我发现如果你将你的 html 模板包装在一个 div 中,那么它会正常工作。或者,如果您在指令中有模板而不是使用 templateUrl。

    【讨论】:

      【解决方案2】:

      我无法用当前代码解决这个问题,但是将父级中的一些 HTML 移动到子指令中解决了这个问题。我不明白为什么,但它仍然解决了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-07
        • 1970-01-01
        • 1970-01-01
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 2018-01-02
        相关资源
        最近更新 更多