首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AngularJS更改时更新ng-init

AngularJS更改时更新ng-init
EN

Stack Overflow用户
提问于 2013-09-11 15:49:09
回答 2查看 5.3K关注 0票数 1

当tableCells发生变化时,有没有办法更新ng-init?我想使用这种(或类似的)方法,这样angular就不需要调用findCellsByDate两次了。

我也尝试用ng-bind或ng-model修改ng-init,但是bind会显示对象对象,model会抛出错误,因为没有属性。

代码语言:javascript
运行
复制
<span ng-init='cells = findCellsByDate(tableCells, day)'>
    <div class='text' ng-show='forecastAndActualForCellsAreNotEmpty(cells)'>
        <span ng-bind='getTotalHoursPercentageForCells(cells)'></span>
        <span>%</span>
    </div>
</span>
EN

回答 2

Stack Overflow用户

发布于 2013-09-11 17:07:53

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

另一方面,你也可以通过css来实现。我假设如果forecastAndActualForCellsAreNotEmpty返回false,那么getTotalHoursPercentageForCells将返回0。因此,您可以将其绑定到数据属性,并使用css规则使div消失。但是为了不使用ng-init,你也必须使用css来获取内容。据我所知,要做到这一点,唯一的方法是使用:before:after。就像这样

代码语言:javascript
运行
复制
    <div class='text' data-percentage='{{getTotalHoursPercentageForCells(findCellsByDate(tableCells, day))}}'>
    </div>

和css

代码语言:javascript
运行
复制
div[data-percentage=0]{
    display: none;
}

div[data-percentage]:before{
    content: attr(data-percentage) "%";
    display: block;
}

现在,我不会使用:before:after来显示实际的应用程序内容,而是显示与样式相关的内容。所以我想最终的建议应该是改变模型。

票数 0
EN

Stack Overflow用户

发布于 2013-09-11 19:18:05

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

代码语言:javascript
运行
复制
$scope.$watch('tableCells', function(tableCells) {
    if(!tableCells) return;

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18735494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档