从DOM中删除指令

时间:2014-10-03 20:05:44

标签: javascript angularjs dom angularjs-directive swiper

我正在使用名为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)

现在我按优先顺序考虑:

  1. 未使用my-custom-slide指令
  2. 提交增强idangerous.swiper.js的拉取请求以支持此用例
  3. 我更喜欢第三个选项,它是一种非弃用的Angular方法,可以从DOM中删除my-custom-slide元素。这存在吗?如果它不存在,有人可以解释或指出有关为什么替换功能被弃用的文档吗?

1 个答案:

答案 0 :(得分:1)

replace正在被弃用,因为为了使其正常运行,需要完成大量的簿记工作并考虑角落案例。

如果你有一个特定的用例(和你一样)并且你知道你的自定义幻灯片没有什么太花哨的话,你可以用模板手动替换它。 (在没有更多细节的情况下,我无法确定这是否合适。)

另一种解决方案可能是使用restrict: 'A'定义您的指令。