我尝试以下方案但没有成功(使用角度1.4.7),并且希望有关如何继续的一些指示。我有以下HTML(简化)作为Angular视图(并使用$ route等)
pagedListController包含一个函数' selectStuff($ event)'。
<div ng-controller="domainController as pageCtrl">
<div paged-list api="pageCtrl.api">
<button ng-click="pgList.selectStuff($event)"></button>
</div>
</div>
以及以下
的指令(再次,简化)app.directive('pagedList', function() {
return {
restrict: 'A',
scope: {},
bindToController: {
api: '='
},
controller: 'pagedListController',
controllerAs: 'pgList',
compile: function(tElem, tAttrs, transcludeFn) {
function linkFn(scope, element, attrs, controller, transcludeFn) {
transcludeFn(scope, function(clone, scope) {
element.append(clone);
}
}
return linkFn;
}
};
})
问题:虽然&#39; api&#39;正确绑定,在paged-list指令的内容中对pgList的引用从不实际调用selectStuff()。我不能为我的生活理解为什么不。我已经查看了有角度的文档以及几十个博客和其他帖子,只是看不出有什么问题。有什么建议吗?
答案 0 :(得分:0)
回答我自己的问题:
上面的原始演示文稿实际上有一个错误,它使所有的差异,我把它写成
function linkFn(scope, element, attrs, controller, transcludeFn) {
transcludeFn(scope, function(clone, scope) {
element.append(clone);
}
}
在我的真实代码中不正确。
我的真实代码名为transcludeFn(),没有'scope'初始参数,只有回调函数('scope'param在transcludeFn中是可选的)。
我不明白,但Angular Tips博客(http://angular-tips.com/blog/2014/03/transclusion-and-scopes/)中的一篇文章解释得非常好,是翻译内容(即按钮)的默认范围。 list是paged-list的PARENT的范围,而不是paged-list。
将按钮范围作为分页列表范围的方法是在transcludeFn中设置可选的第一个“范围”参数。然后,已转换内容的范围将该范围用作自己的范围。未指定,该参数默认设置为paged-list-scope。$ parent。强制它进入分页列表范围,而不是修复所有内容,因为这是定义pgList的地方。
感谢博客文章作者耶稣罗德里格斯(Jesus Rodriguez)非常明确地解释了这一切是如何运作的。