【问题标题】:Materialize CSS Collapsible not expandingMaterialise CSS Collapsible 不展开
【发布时间】:2017-04-30 12:26:44
【问题描述】:

我正在尝试在我的项目中添加一种可折叠的手风琴风格,并具有默认行为。标题似乎进入了 UI,但它不会展开以显示可折叠主体部分。任何人都知道我怎样才能使这项工作?或者看看为什么不是?

这是我的html:

<div class="section">
<div ng-repeat="diary in diaries | orderBy:'date' ">
<div class="row">
    <div class="col s2 push-s11">
        <a class="btn-floating btn-large waves-effect waves-light red right-align" ng-click="deleteDiary(diary.id)"><i class="material-icons">delete_forever</i></a>
    </div>
</div>
<div class="row">
    <h5 class="center-align"><b>{{diary.category}}</b></h5> 
    <h6 class="center-align">{{diary.date}}</h6>
</div>

<div class="row">
    <div class="foodContainer">
    </div>
    <div class="row center-align">
        <ul class="collapsible popout" data-collapsible="accordion" watch>
            <li ng-repeat="food in diary.foods">
                <div class="collapsible-header">{{food.title}}</div>
                <div class="collapsible-body">
                        <label><b>Calories: </b><p>{{food.calories}}</p></label>
                        <label><b>Fat: </b><p>{{food.fat}}</p></label>
                        <label><b>Protein: </b><p>{{food.protein}}</p></label>
                        <label><b>Sodium: </b><p>{{food.sodium}}</p></label>
                        <label><b>Sugars: </b><p>{{food.sugars}}</p></label>
                </div>
            </li>
        </ul>
    </div>
</div>
</div>
</div>

这是我初始化可折叠的控制器:

"use strict";

app.controller("DiaryCtrl", function($scope, $rootScope, $location, DiaryFactory, FoodFactory){
$scope.selectedDiary = '';
// $scope.selectedDiary = 'Diary0';
$scope.totalCalories = 0;
$scope.totalFat = 0;
$scope.totalProtein = 0;
$scope.totalSodium = 0;
$scope.totalSugars = 0;
$scope.diaries = [];
$scope.foods = [];

//activate materialize collapsible list 
$('.collapsible').collapsible();

//getMeals
//lists all meals on the diary page
let getAllDiaries = function(){
    DiaryFactory.getDiary($rootScope.user.uid).then(function(FbDiaries) {
        $scope.diaries = FbDiaries;
        console.log('diaries: ', $scope.diaries);
        FoodFactory.getFoodsFB($rootScope.user.uid).then(function(FbFoods){
            console.log('foods from controller', FbFoods);
            FbFoods.forEach(function(food){
                $scope.diaries.forEach(function(diary){
                    // console.log('foods', food);
                    if(food.mealId === diary.id){
                        diary.foods = diary.foods || [];
                        diary.foods.push(food);
                        console.log('foods array on diary', diary.foods);
                    }
                });
            });
        });
    });
};
getAllDiaries();

这是一个截图: Screen Shot

【问题讨论】:

  • 我个人不使用Materialize,但我猜你的问题是这样的:首先,你从materialize加载可折叠插件并将这些插件应用到所有.collapsible类,然后加载Angular。由于您的.collapsible 部分是由Angular LATER 生成的,因此您必须在Angular 绘制完所有.collapsible 元素后再次重新应用materialize 插件。最简单的是使用角度兼容的插件,比如material.angularjs.org/latest。这是基于 jQuery 的插件的常见问题。这就是为什么许多开发基于 Angular 的插件

标签: javascript angularjs material-design materialize


【解决方案1】:

我之前在使用 React.js 和 Materialize CSS 时遇到过同样的问题。

原因就像@DennyHio 说的那样,那些 DOM 是不可折叠的,因为它们是在 Materialize CSS 完成其初始化脚本之后由 Angular/React 创建的。

我们必须手动“初始化”那些 DOM:

function afterAngularOrReactHasCreatedAllDOM (){
    // Manually make all DOM with .collapsible collapsible 
    $('.collapsible').collapsible();
}

【讨论】:

  • 没错,我之前在使用 Angular + jQuery UI Datepicker 时也遇到过类似的问题。简单地说,你必须在你的 controller/app.js 中调用 collapsible(以及 Materialize 中的每个插件)。最好的方法是获取角度兼容的插件,并使用依赖注入器或指令,这比重新应用整个 jQuery 插件更容易
猜你喜欢
  • 2013-06-14
  • 1970-01-01
  • 2018-06-13
  • 2018-06-30
  • 1970-01-01
  • 2019-07-08
  • 1970-01-01
  • 2018-11-12
  • 1970-01-01
相关资源
最近更新 更多