function exampleController($scope, $q, $timeout) {
$scope.audioSamples = [{
id: 1,
name: "One"
},
{
id: 2,
name: "Two"
},
{
id: 3,
name: "Three"
},
{
id: 4,
name: "Four"
}
];
$scope.play = function(event) {
var deferred = $q.defer();
var elm = event.target;
angular.element(elm).addClass("active");
$timeout(function() {
deferred.resolve(angular.element(elm).removeClass("active"));
return deferred.promise;
}, 5000);
};
}
function exampleDirective() {
return {
restrict: "A",
link: function(scope, element, attrs) {
element.bind("click", function() {
return element.hasClass("active") ?
element.removeClass("active") :
element.addClass("active");
});
}
};
}
angular
.module("app", [])
.controller("exampleController", exampleController)
.directive("exampleDirective", exampleDirective);
.container-fluid {
background-color: #1D1F20;
color: #fff;
font-size: 14px;
font-weight: bold;
padding: 5% 10% 10% 10%;
text-align: center;
}
.btn-container {
display: inline;
}
.play-btn {
margin: 10px;
transition: all cubic-bezier(0.250, 0.460, 0.450, 0.940) 0.5s;
}
.active {
font-weight: bold;
font-size: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>
<link src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css"></script>
<div class="container-fluid" ng-app="app">
<div class="container" ng-controller="exampleController">
<div class="btn-container" ng-repeat="sample in audioSamples">
<button class="btn btn-primary play-btn" ng-click="play($event)" ng-bind="sample.name">
</button>
</div>
</div>
</div>
謝謝你。 $ event參數是關鍵。我陷入了困境,試圖避免觸摸DOM,而是找到了更新切換屬性的方法。但在這種情況下,直接操作DOM也許很好。 – Operator