有没有一种方法可以在ng-repeat中选择当前范围?

时间:2017-06-15 05:35:30

标签: angularjs angularjs-ng-repeat

我有一个Angular 1.x MVC设置如下:

...

.controller('orderdetailCtrl', ['$scope', 'orderServer', ..., function($scope, orderServer, ...) {

  $scope.refundDetail = function(item) {
    orderServer.refundDetailDialog(item).result.then(function(data) {
      if(data) {
        item.refund_info.refund_balance = data;
      }
    });
  }

  $scope.refundEdit = function(item) {
    orderServer.refundEditDialog(item).result.then(function(data) {
      if (data) item.refund_info.refund_balance = data;
    });
  }

  ...

}]).controller('refundDetailDialogCtrl', ['$scope', 'orderServer', ..., function($scope, orderServer, ...) {

  ...

  $scope.cancel = function() {
    $modalInstance.close($scope.entity.refund_info.refund_balance);
  };
}]).factory('orderServer', [..., function(...) {

  return {
    refundDetailDialog: function(item) {
      return $dialogs.create('/.../xxx.modal.html', 'refundDetailDialogCtrl', item, {
        size: "lg"
      });
    },
    refundEditDialog: function(item){
      return $dialogs.create('/.../xxx.modal.html', 'refundEditCtrl', item);
    }

  ...

  }
}]);

现在父页面的设置如下:

<tr ng-repeat="details in entity.refundlist">

...

</tr>

此处重复的“详细信息”在item中为$scope.refundDetail,现在上面的代码运行正常。出于好奇,我想知道我是否可以将orderServer的承诺中的item替换为“details”的当前范围(意思是替换item.refund_info.refund_balance = data)。

我到目前为止尝试过:

$scope.refund_info.refund_balance = data;
this.refund_info.refund_balance = data;
refund_info.refund_balance = data;
$scope.details.refund_info.refund_balance = data;
this.details.refund_info.refund_balance = data;
details.refund_info.refund_balance = data;

其中没有一个有用。

1 个答案:

答案 0 :(得分:1)

此问题存在逻辑错误。当数据通过您的工厂orderdetailCtrl传递回orderServer时,它位于orderdetailCtrl的范围内,而不是ng-repeat范围“详细信息”,这意味着您无法选择“详细信息” “直接。您当前的方法是选择“详细信息”的唯一方法。