gpt4 book ai didi

javascript - 使用 ng-repeat 时无法打开或关闭 Accordion

转载 作者:行者123 更新时间:2023-11-28 03:44:25 24 4
gpt4 key购买 nike

我是 Angular 的新手,我刚刚用 JavaScript 创建了一个动画 Accordion 来获取和显示一些信息。我决定使用 ng-repeat 这样我就不必重复编写代码了。

然而, Accordion 无法动画显示内容。为什么当我使用 ng-repeat 时它不起作用?这与 Angular 工作方式有关吗?

求助,谢谢

举个例子

https://fiddle.jshell.net/ppw2fag9/1/

最佳答案

当以这种方式使用 Angular 时,Angular 生成的 DOM 直到代码运行后才会被填充,因此您不会在 ng-repeat DOM 元素上放置事件监听器。您不应使用查询选择器修改 DOM,而应将 ng-click 指令添加到 ng-repeated 元素。

做你想做的事情的快速方法如下所示:

var app = angular.module("myApp", []);
app.controller("myCtrl", function($scope) {
$scope.records = [
"John",
"Tyrion",
"Khaleesi",
];

$scope.toggleText= function(e) {
var btn = angular.element(e.target);
var panel = btn.next();

btn.toggleClass("active");

if (panel.css('maxHeight')){
panel.css('maxHeight', null);
} else {
panel.css('maxHeight', panel.prop('scrollHeight') + 'px');
}
}
});
button.accordion {
background-color: #eee;
color: #444;
cursor: pointer;
padding: 18px;
width: 100%;
border: none;
text-align: left;
outline: none;
font-size: 15px;
transition: 0.4s;
}

button.accordion.active, button.accordion:hover {
background-color: #ddd;
}

div.panel {
padding: 0 18px;
background-color: white;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app="myApp" ng-controller="myCtrl">

<h2>With ng-repeat</h2>
<div ng-repeat="y in records">
<button class="accordion" ng-click="toggleText($event)">{{y}}</button>
<div class="panel">
<p>Some explaination...bla bla blah</p>
</div>

关于javascript - 使用 ng-repeat 时无法打开或关闭 Accordion ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44060565/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com