Add css class to marked elements in Angularjs

1.6k views Asked by At

I have a ToDo list and I want that all checked elements become striked when I click on the "Strike marked" button.

This is my code index.html

 <!DOCTYPE html>
<html>
<head>
<script src= "http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
    <style>
        .strike {
    text-decoration: line-through;
        }
    </style>
</head>

<body ng-app="myApp" ng-controller="todoCtrl">
<h2>My Todo List</h2>

<div ng-repeat="x in todoList">
    <input type="checkbox" ng-model="x.done"><span  ng-class="" ng-bind="x.todoText"></span>
</div>

<p>

    <button ng-click="strike()">Strike marked</button>
</p>


<script src="myNoteCtrl.js"></script>
</body>
</html>

And this is myNoteCtrl.js

var app = angular.module('myApp', []); 
app.controller('todoCtrl', function($scope) {
    $scope.todoList = [{todoText:'Clean House', done:false},{todoText:'Clean House2', done:false}];



        $scope.strike = function() {
        var oldList = $scope.todoList;
        angular.forEach(oldList, function(x) {
            if (!x.done) x.todoText.class="strike";
        });
    };
});
2

There are 2 answers

0
JB Nizet On BEST ANSWER

You shouldn't add a classproperty on the string todoTextof your task. You should instead add a striked boolean property to the task:

$scope.strike = function() {
    angular.forEach($scope.todoList, function(x) {
        if (!x.done) x.striked = true;
    });
};

And then use this boolean to add the css class:

<span ng-class="{strike: x.striked}" ng-bind="x.todoText"></span>
1
Pankaj Parkar On

You need to use ng-class to achieve the same

ng-class="{isStriked : x.done}" 

Code

$scope.strike = function() {
    var oldList = $scope.todoList;
    angular.forEach(oldList, function(x) {
      x.isStriked = x.done;
    });
};

Working Plunkr