5

我有一個呈現動態內容的手風琴。我的應用程序不包含ngAnimate,因爲客戶端不需要動畫。但是,我看到一個問題,即在未包含ngAnimate時隱藏動態內容。當它被添加回來時,內容呈現很好。情景是你展開手風琴元素。從那裏,您可以執行一個動作,在手風琴機體內的動作下呈現動態內容。一旦超過手風琴身體的高度,內容將被切斷。摺疊和擴展手風琴元素將強制重新計算機身,所有內容都將正確顯示。我創建了一個Plunker來演示這個問題。隱藏在Angular Bootstrap手風琴中的動態內容

Java腳本代碼:

angular.module('ui.bootstrap.demo', ['ui.bootstrap']); 
angular.module('ui.bootstrap.demo').controller('AccordionDemoCtrl', function ($scope) { 
    $scope.oneAtATime = true; 
    $scope.blah = ['blah']; 
    $scope.view = false; 


    $scope.status = { 
    isFirstOpen: true, 
    isFirstDisabled: false 
    }; 
}); 

angular.module('ui.bootstrap.demo').directive('mydir',['$compile',function($compile){ 
    return{ 
    link:function(scope, element, attrs){ 
     scope.changeMe = function(){ 
    scope.blah.push('Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed tortor mi, molestie sit amet malesuada quis, mollis in mi. Aenean non lacus vel tortor sodales efficitur et in lectus. Aliquam erat volutpat. Nunc orci lectus, volutpat sed bibendum et, auctor id lacus. Suspendisse scelerisque lacinia turpis quis semper. Suspendisse metus tellus, finibus sit amet sollicitudin id, venenatis in urna. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Mauris porttitor neque luctus, maximus ligula nec, tincidunt ipsum. Maecenas fringilla consequat nibh blandit rutrum. Etiam sed blandit ipsum, eu pretium mauris. Cras eget mauris ipsum. Vestibulum eu sodales diam.' + 
'Integer tempus turpis sed malesuada pellentesque. Nam lacus eros, interdum a enim eget, consectetur auctor odio. Cras sit amet erat placerat, condimentum ante a, tempor dolor. Aenean vulputate augue quis erat finibus lobortis. Aenean sit amet elit tincidunt, elementum lorem et, aliquet quam. Sed vitae odio lobortis, lobortis lectus et, interdum arcu. Morbi faucibus eget turpis fermentum euismod. Nunc ullamcorper, metus id pretium sodales, turpis neque fringilla tellus, sed molestie neque justo eu mauris. Aenean iaculis ligula sed lacinia efficitur.' + 

'Vivamus dolor mi, feugiat porttitor mollis sed, aliquam non nisi. Proin gravida augue risus, a faucibus magna tincidunt eget. Pellentesque bibendum gravida commodo. Cras sagittis, odio eget rhoncus ornare, lorem enim aliquam augue, id efficitur dui tortor at risus. Mauris enim erat, faucibus vel dictum sit amet, hendrerit sollicitudin eros. Cras condimentum dapibus augue. Ut ornare fringilla metus sollicitudin tempus. Vivamus sit amet pharetra urna.' + 

'Suspendisse potenti. Integer eget vestibulum augue. Donec imperdiet arcu sit amet dui tincidunt sagittis sed eget arcu. Aliquam scelerisque non eros sed tincidunt. Vivamus non orci sed orci facilisis fringilla at ac eros. Integer vitae enim non lacus bibendum aliquet. Nullam congue convallis nulla, sed mattis enim dictum vel. Mauris in ante a libero gravida maximus et at lorem.' + 

'Aenean commodo tempor felis, eget tincidunt erat fringilla a. Curabitur efficitur pulvinar tristique. Proin et euismod ex. Praesent et tortor et nisl posuere dapibus. Mauris arcu urna, aliquet id dignissim quis, pellentesque at velit. Ut tempus justo risus, non ultrices metus volutpat quis. Aliquam sit amet condimentum justo, id suscipit mi. Praesent laoreet elementum nibh, eu consectetur felis volutpat eu. Nulla auctor cursus ipsum, finibus porta leo aliquet eget. Donec in pulvinar nunc. Proin ultrices, purus sit amet finibus ornare, nisl justo faucibus arcu, et cursus ante arcu sit amet augue.;'); 
    }; 
     var template = '<button type="button" class="btn btn-default btn-sm" ng-click="changeMe()">Add content below</button><div ng-repeat="stuff in blah track by $index"><div ng-if="stuff.length > 5">{{stuff}}</div></div>'; 
     element.empty(); 
     element.html(template); 
     $compile(element.contents())(scope); 
    }, 
    restrict:'E' 
    } 

}]); 

HTML標記:

<!doctype html> 
<html ng-app="ui.bootstrap.demo"> 
    <head> 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js"></script> 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular-animate.js"></script> 
    <script src="//angular-ui.github.io/bootstrap/ui-bootstrap-tpls-0.14.2.js"></script> 
    <script src="example.js"></script> 
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet"> 
    </head> 
    <body> 

<div ng-controller="AccordionDemoCtrl"> 
    <script type="text/ng-template" id="group-template.html"> 
    <div class="panel {{panelClass || 'panel-default'}}"> 
     <div class="panel-heading"> 
     <h4 class="panel-title" style="color:#fa39c3"> 
      <a href tabindex="0" class="accordion-toggle" ng-click="toggleOpen()" uib-accordion-transclude="heading"><span 
      ng-class="{'text-muted': isDisabled}">{{heading}}</span></a> 
     </h4> 
     </div> 
     <div class="panel-collapse collapse" uib-collapse="!isOpen"> 
     <div class="panel-body" style="text-align: right" ng-transclude></div> 
     </div> 
    </div> 
    </script> 
    <p>This demonstrates a hidden content issue when ng-animate is not present.</p> 
    <p>Click "Add content below". It will be mostly hidden. Then collapse and expand Header 1. The body will be recalculated and everything will be visible.</p> 

    <uib-accordion close-others="false"> 
    <uib-accordion-group ng-init="status.open=true" is-open="status.open"> 
     <uib-accordion-heading> 
     Header 1 - My dynamic content will disappear. <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': status.open, 'glyphicon-chevron-right': !status.open}"></i> 
     </uib-accordion-heading> 
     <div><mydir></mydir></div> 
    </uib-accordion-group> 
    <uib-accordion-group is-open="status.isFirstOpen"> 
     <uib-accordion-heading> 
     Header 2 <i class="pull-right glyphicon" ng-class="{'glyphicon-chevron-down': status.isFirstOpen, 'glyphicon-chevron-right': !status.isFirstOpen}"></i> 
     </uib-accordion-heading> 
     This content is straight in the template. 
    </uib-accordion-group> 


    </uib-accordion> 
</div> 
    </body> 
</html> 

除非我誤解了角UI自舉documentation,你只需要ngAnimate如果你想動畫。

有沒有人遇到過這個,找到了解決辦法?當動畫被禁用時是否需要設置其他選項?我注意到即使沒有包含ngAnimate,轉換仍然存在。

+0

請問爲什麼你選擇我們的手風琴小部件,如果你不想要它的任何動畫?你能用簡單的ng-show/ng-hide/ng-if更好地做到這一點嗎? –

+0

我試過顯示不使用手風琴的,只是使用ng-click和ng-class的面板,但也遇到同樣的問題。 'Junk' – deejay

回答

3

似乎在0.14.0之後的ui.bootstrap有一些已經打破了這種行爲,但我在源代碼中找不到它。

如果您嘗試使用版本0.13.4的代碼,它按預期工作。請看看更新的plunkr

問題已在github上添加。請看看here

+3

問題在0.14.3中修復:https://github.com/angular-ui/bootstrap/issues/4561 –

+0

將'ngAnimate'模塊添加到項目中也解決了這個問題。 – vinesh