2016-04-01 96 views
0

AngularJS 1.5.0中的元素。我正在使用自定義指令ddTextCollapse來摺疊\展開線程中的長帖子,並且最近遇到了一個奇怪的問題 - 由於DOM未被腳本更改,所以有些帖子不會展開。 這裏是代碼:AngularJS。不能更改指令

link: function(scope, element, attrs) { 
    scope.doc.collapsed = false; 
    var child = element.children(); 

    scope.doc.toggle = function() { 
    scope.doc.collapsed = !scope.doc.collapsed; 
    child.toggleClass('collapsed'); 
    console.dir(child); //everything is fine! Should have changed DOM also, but alas. 
    }; 

    attrs.$observe('ddTextCollapseMaxHeight', function() { 
    var maxHeight = scope.$eval(attrs.ddTextCollapseMaxHeight); 

    if (child.height() > maxHeight) { 
     child.addClass('collapsed'); 
     scope.doc.collapsed = true; 
     var toggleButton = $compile('<i class="material-icons collapse-text-toggle" ng-click="doc.toggle()">more_horiz</i>')(scope); 
     child.after(toggleButton); 
    } 

    }); 
} 

我真搞不清楚爲什麼會發生。它似乎取決於帖子的類型,但即使標記相同,也會出現問題。標記:

<div ng-if="discus.expanded[doc.unid] !== 'attached'" dd-text-collapse dd-text-collapse-max-height="100" class="col-lg-24 martop5 text-content"> 
    <div ng-bind-html="doc.body | linkCreate | nl2br | quoteAuthor | trustAsHtml" class=""></div> 
</div> 

它看起來像你搞砸了範圍和改變孩子只有當你真的需要改變父母。但是,我再也看不出爲什麼會發生這種情況。

+0

你介意爲此添加一個plunkr嗎?此外,我感覺$ scope.apply()在您的崩潰或展開後可能會有所幫助。 –

回答

0

最後我只使用jQuery選擇(而不是elementchild),並與它一起工作了很明顯的一些角度的bug。