需要帮助Angular并隔离没有模板

时间:2015-10-26 13:31:10

标签: angularjs

我尝试以下方案但没有成功(使用角度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()。我不能为我的生活理解为什么不。我已经查看了有角度的文档以及几十个博客和其他帖子,只是看不出有什么问题。有什么建议吗?

1 个答案:

答案 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)非常明确地解释了这一切是如何运作的。