访问已编译的transcluded范围以计算元素的高度

时间:2014-10-02 20:23:27

标签: angularjs

我有以下DOM:

<carousel calculate-carousel-height>
    <slide ng-repeat="article in bestArticles" active="slide.active">
        <div>{{article.text}}</div>
    </slide>
</carousel>

carousel指令使用了transcluded范围,因此我可以在自定义指令calculate-carousel-height的链接函数中获取它:

link: function (scope, element, attributes, ctrl, transcludeFn) {
    transcludeFn(function( clonedTranscludedContent ) {
        // here I can access the transcluded scope
    });
}

然而,问题是这个范围尚未编译(ng-repeat指令尚未处理)因此我没有article.text并且无法计算包含文本的DOM的高度。如何以及何时可以在编译后访问被转换的范围?

这会有效,但它是最好的解决方案吗?

link: function (scope, element, attributes, ctrl, transcludeFn) {
    setTimeout(function () {
        // angular finished its magic and I can access compiled transcluded DOM here
    }, 0);
}

1 个答案:

答案 0 :(得分:0)

我与ng-repeat有类似的问题,这就是我修复它的方法:

link: function(scope, element, attrs) {
    scope.$watch('article.text', function(text) {
        console.log(text);
    }
}

在这种情况下,我不确定转换功能,也许这不是正确答案,但它可能指向正确的方向。