2014-10-03 92 views
1

我正在使用名为Swiper的第三方库。 idangero.us.swiper.js似乎不能很好地处理DOM中的元素指令,因为它假定“幻灯片”元素将作为“包装器”元素的直接子元素。从DOM中删除指令

从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中排除我的指令元素,因此实际的“swiper-slide”元素将在_this.wrapper.childNodes中。我看着一个directive's replace functionality。它似乎完全符合我的要求。但是,它似乎已被弃用。所以我不想使用它。

  1. 不:现在我正在考虑

    按优先顺序 -

    REPLACE([!(已废弃),即2.0版,将在下一主要版本中删除)使用我的自定义幻灯片指令

  2. 提交增强idangerous.swiper.js以支持此用例的拉取请求

我更喜欢第三个选项,它是一个非弃用的Angular方法,用于从DOM中删除my-custom-slide元素。这是否存在?如果它不存在,是否有人可以解释或指向我关于替代功能被弃用的原因的文档?

+0

可能的重复[为什么在AngularJS中不推荐使用replace?](http://stackoverflow.com/questions/24194972/why-is-replace-deprecated-in-angularjs) – JoseM 2014-10-03 21:19:46

+0

提到了我的用例并引用了这个SO问题在弃用替换功能的角度提交上:https://github.com/angular/angular.js/commit/eec6394a342fb92fba5270eee11c83f1d895e9fb – 2014-10-08 03:43:18

回答

1

replace已被弃用,因为为了使其行为正确,需要进行大量的簿记工作和拐角案例的考虑。

如果你有一个特定的用例(如你所做的那样),并且你知道自定义幻灯片上没有什么太花哨的东西,你可以用模板手动替换它。 (我不确定这是否适合您的情况,没有更多的细节。)

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

+0

我想我现在只需要坚持使用香草DOM节点/锅炉板。但感谢您的建议和解释。 – 2014-10-08 01:46:20