2014-10-31 125 views
0

我很清楚混合angularjs和jquery是不是一个好主意。 但是,我需要一个自定义传送带,它可以滑过TEXT ONLY。 angularjs的所有现有轮播动画在很大程度上取决于图像是内容的一部分,而我没有图像。 所以我发现了一个非常好的jQuery库,用于这样的事情,称为“光滑”。AngularJS ngRepeat和jQuery - DOM重建问题

它适用于angularjs,但是当我动态地将新值添加到现有数组时,整个事情就会分崩离析。 我怎么能改变这部分的代码,以便我可以动态地添加对象到数组并保持jQuery的光滑库工作?

这里是代码,你可以按“上一页”和“下一页”,旋转木马将工作,但只要按下添加新元素按钮,整个事情就会崩溃。 http://jsbin.com/tihodihuho/1/edit?html,js,output

+0

使用指令来绑定浮动和不浮动将是个好主意。 – Senthil 2014-10-31 03:02:23

+0

Senthil我非常感兴趣的是用指令解决这个问题,但是,我缺乏正确的知识。你有没有例子?谢谢。我目前的代码:http://jsbin.com/yocun/1/edit?html,js,console,output – uglycode 2014-10-31 10:18:52

+0

我可以帮助你绝对,在现在的东西中间。我会尽快添加答案。 – Senthil 2014-10-31 10:59:43

回答

1

您需要确保在您调用jQuery函数unslickslick时,DOM已经被渲染。

你可以通过在$timeout函数中使用这些函数来完成该操作(当然延迟为0)。这将确保$timeout函数中的代码将在$diggest循环完成后执行。

试试这个:

Example

controller('myCtrl', ['$timeout',function($timeout){ 
    var self = this; 
    self.data = [{ 
     id: 1, 
     title: 'A title, representing part 1', 
     text: 'This is my TEXT 1' 
     }, 
     { 
     id: 2, 
     title: 'Anoter interesting title that will grab your attention', 
     text:'...and even longer text!' 
     }]; 

    self.next =function() { 
    $('.your-class').slickNext(); 
    }; 

    self.prev =function() { 
    $('.your-class').slickPrev(); 
    }; 

    self.add = function() { 
    var newID = self.data.length + 1; 
    self.data.push({ 
     id:newID, 
     title:'A totally new object!', 
     text:'Dynamically added object to an existing array.' 
    }); 
    $timeout(function(){  
     $('.your-class').unslick(); 
     $('.your-class').slick({ 
     autoplay: false, 
     autoplaySpeed: 1500, 
     swipeToSlide: true 
     });    
    }); 
    }; 
}]); 

UDATE

为了解决这个问题的任择议定书在波纹管的注释中描述的问题,它是一个与原来的问题我完全无关已经提出了这种解决方法:

$timeout(function(){    
    $('.your-class').unslick(); 

    //You would think that `unslick` would take care of this, but it didn't so: 
    $('.your-class .slick-cloned, .your-class .slick-list.draggable').remove(); 

    //this is a workaround, which proves that the issue was with the plugin 
    //nothing to do with the original question. In order to address this properly the 
    //OP should open a new question or a bug in the `unslick` plugin. 

    $('.your-class').slick({ 
    autoplay: false, 
    autoplaySpeed: 1500, 
    swipeToSlide: true 
    });    
}); 

Example

+0

虽然这样可以解决问题,但它会创建一个新的问题。出于未知原因,每当我向数组中添加新对象时,都会在光滑的情况下创建另一个空的div。但是,数组的大小是正确的。例如,数组中有2个对象,并且在旋转木马中有两个div。然后我添加另一个对象,数组中有3个对象,但是slick将两个div(一个空)添加到它的传送带。例如:http://jsbin.com/yocun/1/edit?html,js,console,output – uglycode 2014-10-31 10:18:21

+0

@uglycode欢迎来到stackoverflow!由于此答案解决了原始问题,因此应将其标记为已接受。你所遇到的问题是由'slick'插件产生的,这是一个完全不同的问题。因此,你应该为这个问题开一个新的问题。这就是计算器的工作原理,所以请将此答案标记为已接受,请打开一个新问题,我很乐意为您提供帮助。谢谢! – Josep 2014-10-31 15:17:28

+0

@uglycode看看我的最新更新。但是,请注意,这不是SO的工作原理。请将此答案标记为已接受,谢谢! – Josep 2014-10-31 15:47:30