AngularJS在更改时更新ng-init

时间:2013-09-11 07:49:09

标签: javascript angularjs

当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>

2 个答案:

答案 0 :(得分:0)

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

另一方面,你可以通过CSS来做到这一点。我假设如果forecastAndActualForCellsAreNotEmpty返回falsegetTotalHoursPercentageForCells将返回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);        
});

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