我正在使用名为Swiper的第三方库。 idangero.us.swiper.js似乎不能很好地使用保留在DOM中的元素指令,因为它假定" slide"元素将成为"包装器的直接子元素。元件。
来自idangerous.swiper.js:
for (var i = 0; i < _this.wrapper.childNodes.length; i++) {
if (_this.wrapper.childNodes[i].className) {
var _className = _this.wrapper.childNodes[i].className;
var _slideClasses = _className.split(/\s+/);
for (var j = 0; j < _slideClasses.length; j++) {
if (_slideClasses[j] === params.slideClass) {
_this.slides.push(_this.wrapper.childNodes[i]);
}
}
}
}
有效的DOM:
<div class="swiper-container">
<div class="swiper-wrapper">
<div class="swiper-slide">
Slide 1
</div>
<div class="swiper-slide">
Slide 2
</div>
</div>
无效的DOM:
<div class="swiper-container">
<div class="swiper-wrapper">
<my-custom-slide>
<div class="swiper-slide">
Slide 1
</div>
</my-custom-slide>
<my-custom-slide>
<div class="swiper-slide">
Slide 2
</div>
</my-custom-slide>
</div>
</div>
我想创建一个myCustomSlide
指令来减少锅炉板,集中一些css等。为此,我似乎需要从DOM中排除我的指令元素所以实际的&#34; swiper-slide&#34;元素将在_this.wrapper.childNodes
中。我调查了directive's replace functionality。看起来它完全符合我的要求。但是,它似乎已被弃用。所以我不想使用它。
replace([DEPRECATED!],将在下一个主要版本中删除 - 即v2.0)
现在我按优先顺序考虑:
我更喜欢第三个选项,它是一种非弃用的Angular方法,可以从DOM中删除my-custom-slide元素。这存在吗?如果它不存在,有人可以解释或指出有关为什么替换功能被弃用的文档吗?
答案 0 :(得分:1)
replace
正在被弃用,因为为了使其正常运行,需要完成大量的簿记工作并考虑角落案例。
如果你有一个特定的用例(和你一样)并且你知道你的自定义幻灯片没有什么太花哨的话,你可以用模板手动替换它。 (在没有更多细节的情况下,我无法确定这是否合适。)
另一种解决方案可能是使用restrict: 'A'
定义您的指令。