Я пишу пользовательскую директиву <pagination>
, которая возвращает элементы, отвечающие за изменение текущей страницы и настроек пагинации (например, сколько элементов будет отображаться на странице). Директива имеет изолированную область действия (чтобы сделать ее более пригодной для повторного использования).
Внутри шаблона директивы мне нужно вызывать такие функции, как changePage()
или changePaginationSettings()
. Единственный способ передать функцию внутри изолированной области видимости, которую я нашел, - это определить функцию в контроллере.
mainController.js
module.controller("mainController", function($scope) {
$scope.changePage = function() { ... };
});
а затем передать его в директиву в качестве атрибута:
pagination.js
module.directive("pagination", function() {
return {
restrict: "E",
scope: {
changePage: "="
},
templateUrl: "templates/pagination.html"
}
}
pagination.html
<pagination change-page="changePage">
Это выглядит очень уродливо для меня, потому что это разбивает связанный код на 2 несвязанных файла. То есть changePage()
должна быть определена в файле pagination.js, а не в mainController.js.
Я думаю, что-то подобное должно быть возможно:
pagination.js
module.directive("pagination", function() {
function changePage() { ... };
return {
restrict: "E",
scope: {
changePage: changePage
},
templateUrl: "templates/pagination.html"
}
}
Но такой код выдает (бессмысленно для меня) ошибку: Error: definition.match is not a function
.
Есть ли способ достичь этого? Я имею в виду передать функцию, определенную в том же файле, внутри изолированной области директивы.
Я прочитал AngularJS директиву Docs, но они даже не перечислить, какие правовые ценности в scope
объекта директивы, только дать некоторые "=", "и" и "@" примеры.