2015-11-19 55 views
1

我有两个div一个指令:操作件调整在AngularJS

<div id="childContainer"> 
    <div id="child"> 
    <a class="btn btn-primary testBtn1" ng-show="!vm.hideButton">Test Button 1</a> 
    <a class="btn btn-secondary testBtn2">Test Button 2</a> 
    </div> 
</div> 

我试图保持childContainer div的,相同的高度child格,特别是当我躲在testBtn1。这里是我的指令的控制器内的手表功能,应该这样做:

$scope.$watch(function(){ 
    return vm.child.height(); //vm.child is a jQuery object 
}, function(){ 
    vm.childContainer.height(vm.child.height()); //vm.childContainer is a jQuery object 
}); 

但是,按预期这是行不通的。就好像手表功能触发得太晚了一样。您可以查看问题here on my plnkr

+0

你的手表更改为以下:'$范围$腕表( 'vm.child.height',函数(){vm.childContainer.height(vm.child.height()) ;})'。 – jperezov

+0

嗯。我尝试过,但那时手表事件没有触发。也许这与我使用controllerAs的事实有关? – nardnob

+0

是啊给我一秒钟。我只是意识到你正在关注一个函数的返回值 - '$ watch'不能这样工作。你把手表放在一个变量上,而不是一个值。 – jperezov

回答

2

$watch应该在你想要监视的变量中,不是的值。

return vm.child.height(); //vm.child is a jQuery object 

在这里,你正在返回的vm.child.height();。修改成:

$scope.$watch('vm.child.height()', function(){ 
    vm.childContainer.height(vm.child.height()); //vm.childContainer is a jQuery object 
}); 
+0

我会重新发布我对评论的答案..我尝试过,但事件没有触发。我也试着看vm.child.offsetHeight,但没有奏效。 – nardnob

+1

@Brandon这与我的评论不同。 [我甚至可以在你的plnkr上工作](http://plnkr.co/edit/0sBDD0AcVVKoAwk4iGyN?p=preview)。 – jperezov

+1

哦,对不起。我无法相信你能把它运用起来。我一直在试图解决这个问题一天。谢谢 – nardnob