3

このように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) {
               ...
            }
        }
        
    };

1つだけ使用すると、すべて正常に動作します。ただし、2 つ以上使用すると、このエラー TypeError: Cannot read property 'childNodes' of undefinedがスローされます

これがプランカーリンクの デモです

4

1 に答える 1

4

別のスライダーを追加すると、最初のスライダーと同じ参照が使用handlercontainerれます。要素が現在 DOM に存在する場合、append は実際に要素を移動するため、最初のディレクティブから削除されます。

インスタンスごとに新しい要素を作成する (または複製する) 必要があります。 http://plnkr.co/edit/CC2bCXdaoAo7HjQ0oAu0?p=preview

于 2013-07-26T09:15:15.487 に答える