2

I am creating a seat booking system in angularjs. Seats are displayed in a matrix form. And requirement is whenever I select a vacant seat, img src should be changed to selected seat.

Being on learning curve in Angularjs, I am not sure how to achieve this. My HTML to display seat layout is generated dynamically. And I am using directives to embed HTML at runtime. Also using directives to handle the image src change on image click.

Created a plnkr for this :- http://plnkr.co/edit/EemPUIKglSz6j1zQss4i?p=preview

My HTML

 <body>
    <h1>Compile dynamic HTML</h1>
    <div ng-controller="MyController">
      <textarea ng-model="html"></textarea>
      <div dynamic="html"></div>

    </div>
  </body>

My Controller

var app = angular.module('app', []);

app.directive('dynamic', function ($compile) {
  return {
    restrict: 'A',
    replace: true,
    link: function (scope, ele, attrs) {
      scope.$watch(attrs.dynamic, function(html) {
        ele.html(html);
        $compile(ele.contents())(scope);
      });
    }
  };
});

app.directive('change-on-click', function () {
    return {
        restrict: 'A',
        link: function($scope, element,attrs){
          element.bind('click', function(){
                attrs.$set('src', 'C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_sleeper_selected.jpg');
          })
        }
    }
});

function MyController($scope,$sce) {
  $scope.click = function(arg) {
    alert('Clicked ' + arg);
  }
  var str = ["<table frame='box'><tbody>"
, "<tr>"
, "<td><img id=1 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img id=4 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img id=8 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img id=12 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img id=16 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img id=20 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img id=24 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img id=28 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img id=32 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img id=36 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img id=40 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img id=44 title='Avaliable' change-on-click src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "</tr>"
, "<tr>"
, "<td><img title='Avaliable' change-on-click id=2 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=5 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=9 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=13 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=17 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=21 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=25 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=29 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=33 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=37 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=41 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=45 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "</tr>"
, "<tr>"
, "<td><img title='Not a seat' src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/no_seat.jpg'/></td>"
, "<td><img title='Not a seat' src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/no_seat.jpg'/></td>"
, "<td><img title='Not a seat' src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/no_seat.jpg'/></td>"
, "<td><img title='Not a seat' src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/no_seat.jpg'/></td>"
, "<td><img title='Not a seat' src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/no_seat.jpg'/></td>"
, "<td><img title='Not a seat' src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/no_seat.jpg'/></td>"
, "<td><img title='Not a seat' src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/no_seat.jpg'/></td>"
, "<td><img title='Not a seat' src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/no_seat.jpg'/></td>"
, "<td><img title='Not a seat' src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/no_seat.jpg'/></td>"
, "<td><img title='Not a seat' src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/no_seat.jpg'/></td>"
, "<td><img title='Not a seat' src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/no_seat.jpg'/></td>"
, "<td><img title='Not a seat' id=46 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "</tr>"
, "<tr>"
, "<td><img title='Avaliable' change-on-click id=3 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=6 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=10 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=14 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=18 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=22 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=26 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=30 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=34 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=38 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=42 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=47 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "</tr>"
, "<tr>"
, "<td><img id=Mobile src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_unavailable.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=7 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=11 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=15 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=19 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=23 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=27 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=31 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=35 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=39 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=43 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "<td><img title='Avaliable' change-on-click id=48 src='C:/Users/vk0044682/Desktop/dynamic/dynamic/assets/images/ac_semi_sleeper_vacant.jpg'></img></td>"
, "</tr>"

, "</tbody></table>"];
  $scope.html = $sce.trustAsHtml(str.join(''));

 }

1 Answer 1

1

Your attribute must be snake-case in your HTML, but camel-case in your directive definition:

app.directive('changeOnClick', function () {
Sign up to request clarification or add additional context in comments.

4 Comments

Thanks alot for this. Such a small mistake. Thanks again
Is there any way I can get value of other properies like src or title in my directive?
You can get them through the attr object (3rd argument passed to your link function): attr.src, attr.title
thanks again :). I was trying to use attrs.$observe but it was crashing my Chrome browser. attr.title is working fine.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.