我正在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
答案 0 :(得分:4)
当您添加另一个滑块时,它会使用相同的handler
和container
引用作为第一个滑块。因为append实际上会移动元素,如果它当前存在于DOM中,它将从第一个指令中删除。
您需要为每个实例创建新元素(或克隆它们)。 http://plnkr.co/edit/CC2bCXdaoAo7HjQ0oAu0?p=preview