1

当 tableCells 发生变化时,有没有办法更新 ng-init ?我想使用这种方法(或类似方法),因此角度不必调用 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>
4

2 回答 2

0

我不认为 ng-init 那样工作,所以我想的是你应该改变你的一些控制器/模型代码来保存一个布尔值,forecastAndActualForCellsAreNotEmpty它会被更新。

另一方面,您可以通过 css 来完成。我假设如果forecastAndActualForCellsAreNotEmpty返回falsegetTotalHoursPercentageForCells将返回 0。因此您可以将其绑定到数据属性并使用 css 规则使 div 消失。但是为了不使用ng-init,您还必须使用 css 获取内容。据我所知,做到这一点的唯一方法是使用:beforeand :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-11T09:07:52.540 回答
0

您可以将更改cells变量的逻辑放在观察变化的监视函数中tableCells variable

$scope.$watch('tableCells', function(tableCells) {
    if(!tableCells) return;

    $scope.cells = findCellsByDate(tableCells, $scope.day);        
});

通过这种方式,您可以将该逻辑保留在控制器中

于 2013-09-11T11:18:05.200 回答