当tableCells发生变化时,有没有一种方法可以更新ng-init?我想使用这种方法(或类似的),因此angular不必两次调用findCellsByDate。
我还试图用ng-bind或ng-model更改ng-init,但是bind会显示[object Object],并且由于没有归属,模型会抛出错误。
<span ng-init='cells = findCellsByDate(tableCells, day)'>
<div class='text' ng-show='forecastAndActualForCellsAreNotEmpty(cells)'>
<span ng-bind='getTotalHoursPercentageForCells(cells)'></span>
<span>%</span>
</div>
</span>
答案 0 :(得分:0)
我不认为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
来显示实际的应用程序内容,而是使用与样式相关的内容。所以我认为最终的建议是改变模型。
答案 1 :(得分:0)
您可以将用于更改cells
变量的逻辑放在监视函数中,以观察tableCells variable
$scope.$watch('tableCells', function(tableCells) {
if(!tableCells) return;
$scope.cells = findCellsByDate(tableCells, $scope.day);
});
通过这种方式,您可以将该逻辑保留在控制器中