JpDevs JpDevs - 2 months ago 17
HTML Question

Angular JS dynamic HTML from PHP ng-click not working

I am new in Angular JS,

I want to make a ng-click event in dynamically made HTML from PHP, here is the code.

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

angular.module('pageapp')
.filter('to_trusted', ['$sce', function($sce){
return function(text) {
return $sce.trustAsHtml(text);
};
}]);

app.controller('productList',function($scope,$http){
$http.get("../webservice/api/get-products")
.success(function(response){
$scope.products = response.data;
$scope.paginationLinks = response.links;
});

$scope.getPageData = function () {
alert("Hello");
}
});


HTML...

<section ng-controller="productList">
<table class="table table-responsive table-hover">
<thead>
<tr>
<th>S.No</th>
<th>Name</th>
<th>Color</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="product in products">
<td>{{$index + 1}}</td>
<td>{{product.name}}</td>
<td>{{product.color}}</td>
<td>{{product.price}}</td>
</tr>
</tbody>
</table>
<ul class="pagination pull-right" ng-bind-html="paginationLinks|to_trusted""></ul>
</section>


PHP..

public function Products(){
$start = 0;
$perPage = 10;
$count = DB::table('products')->count();
$totalPages = ceil($count/$perPage);
$data = DB::table('products')
->select('name','price','color')
->take($perPage)
->skip($start)
->get();

for ($i=1; $i <= $totalPages; $i++) {
if($i == 1)
$links ="<li><a href=''>".$i."</a></li>";
else
$links .="<li><a href='' ng-click='getPageData(".$i.")'>".$i."</a></li>";
}

return [
'totalpages' =>$totalPages,
'data' =>$data,
'links' =>$links
];
}

Answer

Instead of adding ng-click='getPageData(".$i.") in PHP, add ng-click="getPageData($event)" to your ul element in your HTML. Hence you can get the clicked li element (by event bubbling) in your JS and you can do whatever you want.

hope it helps :)