Ниже приведена моя Pagination Directive
angular.module('frontendApp')
.directive('postsPagination', function() {
return{
restrict: 'E',
template: '<ul class="pagination">'+
'<li ng-show="currentPage != 1"><a href="javascript:void(0)" ng-click="getList(1)">«</a></li>'+
'<li ng-show="currentPage != 1"><a href="javascript:void(0)" ng-click="getList(currentPage-1)">‹ Prev</a></li>'+
'<li ng-repeat="i in range" ng-class="{active : currentPage == i}">'+
'<a href="javascript:void(0)" ng-click="getList(i)">{{i}}</a>'+
'</li>'+
'<li ng-show="currentPage != totalPages"><a href="javascript:void(0)" ng-click="getList(currentPage+1)">Next ›</a></li>'+
'<li ng-show="currentPage != totalPages"><a href="javascript:void(0)" ng-click="getList(totalPages)">»</a></li>'+
'</ul>'
};
});
Я хочу, чтобы имя функции в ng-click
было динамическим. I: e ng-click = getList
directive.html
<ul class="pagination">
<li ng-show="currentPage != 1">
<a href="javascript:void(0)" ng-click="getList(1)">«</a></li>
<li ng-show="currentPage != 1">
<a href="javascript:void(0)" ng-click="getList(currentPage-1)">‹ Prev</a></li>
<li ng-repeat="i in range" ng-class="{active : currentPage == i}">
<a href="javascript:void(0)" ng-click="getList(i)">{{i}}</a></li>
<li ng-show="currentPage != totalPages">
<a href="javascript:void(0)" ng-click="getList(currentPage1)">Next ›</a></li>
<li ng-show="currentPage != totalPages">
<a href="javascript:void(0)" ng-click="getList(totalPages)">»</a></li>
controller1.js
angular
.module('frontendApp')
.controller('Ctrl1', function(){
$scope.getList = function(){} // your implementation 1 here
});
controller2.js
angular
.module('frontendApp')
.controller('Ctrl2', function(){
$scope.getList = function(){} // your other implementation here
});
Теперь используйте один и тот же html файл в обоих местах и просто изменив имя контроллера. Ypu может иметь разные реализации для одной и той же функции, таким образом повторно используя ваш шаблон:
angular.module('frontendApp')
.directive('postsPagination', function() {
return{
restrict: 'E',
templateUrl: 'directive.html',
controller: 'Ctrl1'
};
});
angular.module('frontendApp')
.directive('someOther', function() {
return{
restrict: 'E',
templateUrl: 'directive.html',
controller: 'Ctrl2'
};
});
Вы можете использовать метод javascript eval()
.
Функция eval позволяет динамически выполнять исходный код JavaScript.
Чтобы превратить строку имени функции в выражение javascript, cyou может использовать метод eval()
следующим образом:
var dateFn = "Date(1971,3,8)";
var myDate;
eval("myDate = new " + dateFn + ";");
document.write(myDate);
// Output: Thu Apr 8 00:00:00 PDT 1971
Посмотрите это: https://jsfiddle.net/n9KNv/14/
Используйте компилятор $ для углового интерпретации ng-click в директиве. Как это
angular.module('frontendApp')
.directive('postsPagination', function(){
return{
restrict: 'E',
template: $compile('<ul class="pagination">'+
'<li ng-show="currentPage != 1"><a href="javascript:void(0)" ng-click="getList(1)">«</a></li>'+
'<li ng-show="currentPage != 1"><a href="javascript:void(0)" ng-click="getList(currentPage-1)">‹ Prev</a></li>'+
'<li ng-repeat="i in range" ng-class="{active : currentPage == i}">'+
'<a href="javascript:void(0)" ng-click="getList(i)">{{i}}</a>'+
'</li>'+
'<li ng-show="currentPage != totalPages"><a href="javascript:void(0)" ng-click="getList(currentPage+1)">Next ›</a></li>'+
'<li ng-show="currentPage != totalPages"><a href="javascript:void(0)" ng-click="getList(totalPages)">»</a></li>'+
'</ul>');
};
});