当tableCells发生变化时,有没有办法更新ng-init?我想使用这种(或类似的)方法,这样angular就不需要调用findCellsByDate两次了。
我也尝试用ng-bind或ng-model修改ng-init,但是bind会显示对象对象,model会抛出错误,因为没有属性。
<span ng-init='cells = findCellsByDate(tableCells, day)'>
    <div class='text' ng-show='forecastAndActualForCellsAreNotEmpty(cells)'>
        <span ng-bind='getTotalHoursPercentageForCells(cells)'></span>
        <span>%</span>
    </div>
</span>发布于 2013-09-11 17:07:53
我不认为ng-init是那样工作的,所以我想你应该修改你的一些控制器/模型代码来保存forecastAndActualForCellsAreNotEmpty的布尔值,这样会更新。
另一方面,你也可以通过css来实现。我假设如果forecastAndActualForCellsAreNotEmpty返回false,那么getTotalHoursPercentageForCells将返回0。因此,您可以将其绑定到数据属性,并使用css规则使div消失。但是为了不使用ng-init,你也必须使用css来获取内容。据我所知,要做到这一点,唯一的方法是使用:before和:after。就像这样
    <div class='text' data-percentage='{{getTotalHoursPercentageForCells(findCellsByDate(tableCells, day))}}'>
    </div>和css
div[data-percentage=0]{
    display: none;
}
div[data-percentage]:before{
    content: attr(data-percentage) "%";
    display: block;
}现在,我不会使用:before或:after来显示实际的应用程序内容,而是显示与样式相关的内容。所以我想最终的建议应该是改变模型。
发布于 2013-09-11 19:18:05
您可以将更改cells变量的逻辑放在观察tableCells variable更改的监视函数中
$scope.$watch('tableCells', function(tableCells) {
    if(!tableCells) return;
    $scope.cells = findCellsByDate(tableCells, $scope.day);        
});通过这种方式,您可以将逻辑保留在控制器中
https://stackoverflow.com/questions/18735494
复制相似问题