【问题标题】:How to incremment value in for each angular?如何增加 foreach 角度的值?
【发布时间】:2016-12-16 04:38:39
【问题描述】:

每个角度都有一个问题。我想在控制器的 forEach 中增加我的值。我通过我的 API 像字符串一样取值,当我点击按钮时,我需要增加这个值。这是我的代码:

控制器:

    PostService.getActivity(user)
    .then(function (data) {
        $scope.activities = data.activities;
    });

    $scope.AddToFavorite = function (activity_id, fav_count) {
        PostService.AddToFavorite(activity_id, user)
            .then(function (data) {
                console.log('Like added');
                $scope.acititivty.fav_count = parseInt($scope.acititivty.fav_count) + 1;
            })
    };

HTML - 查看

<div class="list card activity-card animated fadeIn" ng-switch-default ng-repeat="activity in activities" ng-if="activity.type == 'activity_update'">
    <div class="item item-avatar">
        <img ng-src="{{activity.user.avatar}}">
        <div class="activity-header">
            <h2>{{activity.user.username}}</h2>
            <p am-time-ago="activity.time"></p>
        </div>
    </div>
    <div class="item item-body">
        <div ng-bind-html='activity.content' class="activity-content"> </div>
    </div>
    <div class="item item-body activity-footer row">
        <!-- Favorite-->

        <button ng-click="AddToFavorite(activity.activity_id, activity.fav_count)" class="col-50 add-to-fav"><i class="fa fa-beer violet"></i>
            <span>({{activity.fav_count}})</span>
        </button>

    </div>
</div>

我尝试这样做:

 <button ng-click="AddToFavorite(activity.activity_id, activity.fav_count); activity.fav_count = + parseInt(activity.fav_count) + 1" class="col-50 add-to-fav">
    <i class="fa fa-beer violet"></i>
    <span>({{activity.fav_count}})</span>
 </button>

这是有效的,但每次值开始等于 1。如果 fav_count 在单击后等于 5,则显示 1。

我在控制器中尝试这样:

 $scope.activity.fav_count = parseInt($scope.activity.fav_count) + 1;

但它是 forEach 中数组的一部分,我会更改它们。如何解决这个问题?我为此浪费了很多时间。

【问题讨论】:

  • 你能提供你的代码的工作 plunker 吗?
  • 应该是 activity.fav_count 而不是 acititivty.fav_count 吧?
  • @GraveyardQueen 抱歉弄错了。但它仍然无法正常工作
  • @Nitheesh 对不起,我试图这样做,但连接 plunker 和 fiddle 出了点问题。

标签: javascript angularjs arrays foreach


【解决方案1】:

因为它是一个转发器,所以会为每个活动加载控件。 如果您想计算总体收藏夹,请执行以下操作。

在你的控制器上定义一个变量:

$scope.totalFavorites = 0; //even you can load initial values from DB

不要忘记将 $scope 注入到您的控制器中。

然后在您的按钮单击代码上,执行以下操作。

<button ng-click="AddToFavorite(activity.activity_id, activity.fav_count); totalFavorites+=1;activity.fav_count = totalFavorites" 

希望对你有帮助

【讨论】:

  • 那帮助)非常感谢)
  • 不要这样,因为如果你在更新数据库之前更改了前端的数据,它会导致一些问题,例如在数据库中更新时发生任何故障而不影响数据库但是前端发生了变化。用户可能会误导
【解决方案2】:

仅仅使用呢

$scope.acititivty.fav_count++;

我不确定这个值是在哪里声明的,但是在代码的开头,你应该定义它:

$scope.activity.fav_count = 0;

或者,如果这是从 API 返回的,并且该属性可能存在也可能不存在,您可以尝试:

$scope.activity.fav_count = $scope.activity.fav_count || 0;
$scope.activity.fav_count = 0;

我还注意到一个错字,不确定这是问题的一部分,还是您的 SO 帖子的翻译:

HTML

<span>({{activity.fav_count}})</span> 

JS

$scope.acititivty.fav_count++; // acititivty != activity

【讨论】:

  • 它像字符串一样解析远增量值实际上需要像整数一样解析
  • 我刚刚添加了一些关于初始化值的信息。我看不到您在函数中使用第二个参数的位置,如果您只是添加收藏夹,则应该将其消除。 (只需使用 AddToFavorite(activity.activity_id)
  • 这是一个字符串在哪里/为什么?根据@graveyardqueen,可以通过演示提供更好的帮助,因为部分代码无法为这种情况提供完整的上下文。
【解决方案3】:

试试这个, 控制器的变化

$scope.AddToFavorite = function (activity) {
    PostService.AddToFavorite(activity.activity_id, user)
        .then(function (data) {
            console.log('Like added');
            activity.fav_count++;
        })
};

HTML 的变化

<button ng-click="AddToFavorite(activity)" class="col-50 add-to-fav"><i class="fa fa-beer violet"></i>
    <span>({{activity.fav_count}})</span>
</button>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多