TypeError:无法读取AngularJS指令中未定义的属性'childNodes'

时间:2013-07-26 08:10:20

标签: angularjs angularjs-directive

我正在AngularJS中制作一个指示“Tab Slide Out”,如下所示

angular.module('myApp',[]).directive('tabSlideOut', ["$window", "$document", "$timeout", function($window, $document, $timeout) {
    // default settings of a regular tab slide out
    var defaultSettings = {
        speed: 300,
        action: 'click',
        tabLocation: 'left',
        top: '200px',
        left: '50px',
        fixedPosition: true,
        positioning: 'absolute',
        onLoadSlideOut: false
    }

    // handler element
    var handler = angular.element('<a class="handler btn">{{title}}</a>');

    // panel element aka container
    var container = angular.element('<div ng-transclude></div>');

    return {
        restrict: 'E',
        transclude: true,
        replace: true,
        template: '<div class="tab-slide-out"></div>',
        scope: {
            options: "=",
            status: "=",
            title: "@"
        },
        compile: function(template) {

            // append handler to template
            template.append(handler);

            // append container to template
            template.append(container);

            console.log(template);
            // return linking function
            return function(scope, element, attrs) {
               ...
            }
        }

    };

如果我只使用一个,一切正常。但是,如果我使用2或更多,它将抛出此错误      TypeError:无法读取未定义的属性'childNodes'

这是plunker链接 Demo

1 个答案:

答案 0 :(得分:4)

当您添加另一个滑块时,它会使用相同的handlercontainer引用作为第一个滑块。因为append实际上会移动元素,如果它当前存在于DOM中,它将从第一个指令中删除。

您需要为每个实例创建新元素(或克隆它们)。 http://plnkr.co/edit/CC2bCXdaoAo7HjQ0oAu0?p=preview