【发布时间】:2015-08-17 14:28:04
【问题描述】:
我正在编写一个自定义 <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 Directive Docs,但他们甚至没有列出指令的scope 对象中的合法值是什么,只给出了一些“=”、“&”和“@”示例。
【问题讨论】:
标签: angularjs angularjs-directive angularjs-scope