The script works fine while I was working on ASP.NET MVC; however it started not working while I tried to reuse it for the app in AngularJS.
Why? AngularJS loaded in different time than ASP.NET MVC.... Here is what I figured it out after googling( sure! )
1. create a directive using angularJS $timeout service:
gicGiaApp.directive("ngTopload", ['$timeout', function ($timeout) { return { link: function ($scope, element, attrs) { $scope.$on('myDataloaded', function () { $timeout(function () { //This is the reused function I would like to call //see the definition below RowSpanHover(); }, 0, false); }) } }; }]);
2. add directive into the view template
....
<div class="ng-cloak" ng-cloak="" ng-topload="">
....
<table class="tgxxx" id="xxxTOP510"></table>
</div>
<div class="ng-cloak" ng-cloak="" ng-topload="">
....
<table class="tgxxx" id="xxxTOP510"></table>
</div>
3. add this line into the controller to broadcast communicating with $on defined in the directive above:
..... $scope.$broadcast('myDataloaded'); ....
4.And here is the script function being reused both ASP.NET MVC and AngularJS:
function RowSpanHover() { $('#xxxResults .tgxxx tbody td').hover(function () { $element = $(this); $element.parent().prevAll('tr:has(td[colspan]):first').addClass("hover"); if ($element.parent().has('td[rowspan]').length == 0) $element.parent().prevAll('tr:has(td[rowspan]):first').find('td[rowspan]').addClass("hover"); }, function () { $element.parent().prevAll('tr:has(td[rowspan]):first').find('td[rowspan]').removeClass("hover"); }); }