AngularJS指令ng-click没有传递参数
AngularJS directive ng-click parameters not being passed
我试图建立一个指令输出一些HTML格式的代码分页控制(Twitter Bootstrap风格),该指令需要采取当前页面和总页面从我的控制器的范围,当分页链接被点击触发我的控制器上的一个函数来改变页面(构建一个url和调用$location改变页面)。
我在YouTube上看过很多优秀的angularjs视频(http://www.youtube.com/watch?v=nKJDHnXaKTY),但似乎没有一个涉及到这个特殊的复杂场景。
任何帮助将是伟大的!
下面是让它更清晰的jsfiddle:
http://jsfiddle.net/philjones88/dVFDT/我不能工作的是传递参数,我得到:
changing page to: undefined
在您的指令中添加changePage调用(我知道它不是您想要的地方)。使用相同的参数调用父作用域changePage。
$scope.changePage = function(index){
console.log("running changePage");
$scope.$parent.changePage(index); //might want to check if the parent scope has this too
}
作为另一个提示,在指令中,你不应该在被发送的变量前面使用$。在本例中是$scope, $element, $attrs。在控制器(不是链接函数)的作用域前面看到的$是用来让你知道它正在被注入的。它没有被注入到链接控制器中。例如:
app.directive("pager", function ($injector1, $injector2) {
这是注入参数的位置,您希望能够区分它们两个。我意识到这有点偏离轨道,我希望我对修改epage的建议是您正在寻找的。
编辑:更新小提琴http://jsfiddle.net/dVFDT/48/
为将来的搜索者修改的答案:您通过click方法传递的函数如下:
..... click="changePage()".....
需要修改为:
..... click="changePage".....
这意味着你传递的是函数而不是函数调用。这意味着在您的指令中,当您连接changePage回调时,您正在使用索引调用函数,如下所示:
changePage()(1)
我完全不明白,但在你的指令结束时,你想执行你的控制器的功能?
试题:
<div class="pagination">
<pager current-page="currentPage" total-pages="totalPages" query="query" callback="changePage()"></pager>
</div>
我意识到这个问题有点老了,但实际上有另一种方法来解决这个问题,不需要重新编译或调用父作用域。但是,它确实需要从指令中以一种稍微不同的方式调用该方法。
你可以在这里看到小提琴:小提琴
最令人感兴趣的行是在模板声明中。调用onClick需要向它传递一个对象,而不仅仅是值。
template:
"<div ng:repeat='i in [] | range:totalPages'> " +
"<a ng:click='onClick({page: i + 1})'>Page {{i + 1}}</a>" +
"</div>",
这也使用了来自Gloopy答案的过滤器,以便在ng:repeat
中迭代n
的次数。
- 参数变量出现ngTable指令问题
- 如何在angularjs中传递对象字段作为指令参数
- 角度指令控制器:参数不是函数,未定义
- 在嵌套递归指令中将参数传递给父控制器方法
- Angularjs将函数从控制器传递到指令(或从指令调用控制器函数)-带参数
- 在更改时选择,插入类似函数的参数或指令之间的差异
- 角度指令的参数相同
- 角度调用父函数,其参数来自两个级别深的指令
- 将对象作为参数传递给指令
- angularjs指令绑定带参数的函数
- 从指令调用控制器函数(使用从指令传递的参数)
- AngularJS 指令参数 “ctrls”
- AngularJS指令接受参数
- 将参数从 html 指令传递到控制器
- 在 TypeScript 中带有函数参数的角度指令
- AngularJS指令范围似乎只接受一个参数
- 如何在指令中获取属性参数
- 参数未在指令函数中传递
- 如何在 AngularJS 中使用属性本身将可写参数传递给属性指令
- 评估指令的参数角度