更新角度范围对象中的单个项目

时间:2016-02-15 21:38:46

标签: angularjs ionic-framework angularjs-scope

我正在为Ionic应用程序上的图片创建类似功能。

如果请求与照片相似或不同,我可以返回类似的计数,如果是真或假。

我的照片上有一个功能,可以在我的控制器中调用一个动作(双击)

<div ng-repeat="update in updates" class="custom-card">
  <div ng-show="{{update.image}}" class="image">
    <img on-double-tap="likeUpdate({{update.data.id}})" class="full-image" ng-src="https://s3-eu-west-1.amazonaws.com/buildsanctuary/images/{{update.image.name}}" imageonload>
  </div>
  <div class="action-bar">
    <div class="left">
        <i ng-class="liked ? 'ion-ios-heart red' : 'ion-ios-heart-outline'"></i><span>like</span>
    </div>
  </div>

如果这是显示的单个更新,我会简单地更新'更新'范围,它会起作用。但我有一个显示的照片列表,用户可以双击任何人。我需要的是能够更新更新范围,但仅限于单个更新,而不是整个更新。

我在控制器中的功能:

$scope.likeUpdate = function(update_id) {
    console.log("clicked");
    $http.post( $rootScope.apiURL + 'likeupdate', {
        update_id : update_id,
        user_id : $rootScope.currentUser.id
    }).success(function(update, response){
       // update the specific ng repeat item scope?
    });
}

这有角色吗?

1 个答案:

答案 0 :(得分:1)

不要传递id,将整个update传递给您的处理程序,以便您可以在内部进行更改,如下所示:

<img on-double-tap="likeUpdate({{update}})" ... >

和控制器:

$scope.likeUpdate = function(update) {
    console.log("clicked");
    $http.post( $rootScope.apiURL + 'likeupdate', {
        update_id : update.data.id,
        user_id : $rootScope.currentUser.id
    }).success(function(result, response){
       update.xxx = ...
    });
}

一个简单的可运行示例:

angular.module('myApp', [])
  .controller('MyController', ['$scope', function($scope) {
     $scope.updates = [{'name':'one', count: 2}, {'name':'two', count:3}];
     $scope.likeUpdate = function(update) {
       // this doesn't work:
       update = {'name': 'test', count: update.count+1};
       // this works:
       update.name = 'test';
       update.count += 1;
     };
}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="myApp" ng-controller="MyController">
  <div ng-repeat="update in updates" class="custom-card">
    <div ng-click="likeUpdate(update)">{{update.name}} - {{update.count}}</div>
  </div>
</div>