AngularJS - 在点击时将值传递给服务

时间:2014-06-11 13:35:50

标签: javascript angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

我有一个简单的ng-click,目前正在通过ng-init从ng-repeat传递$ index值。

我想知道的是如何将另一个定义的值传递给我的ng-click?

当前HTML:

<div ng-repeat="values in Categories" id="history-{{$index}}" ng-init="sectionIndex = $index">
      {{ values.Name }}, {{ values.Amount }}
</div>
<div>
    <div class="left" ng-click="scrollLeft(sectionIndex)"></div>
    <div class="right" ng-click="scrollRight(sectionIndex)"></div>
</div>

JS:

$scope.scrollLeft = scrollLeftRight.moveLeft;
$scope.scrollRight = scrollLeftRight.moveRight;


app.factory('scrollLeftRight', function () {
return {
  moveLeft: function (sectionIndex) {
    var scrollViewport_width = $(window).width();
    var pixelsToMove = 0;
    $('#history-' + sectionIndex).scrollLeft(pixelsToMove - 100);
    pixelsToMove = pixelsToMove - 100;
    if (pixelsToMove <= 0) {
      pixelsToMove = 0;  // reset
    } else {
      pixelsToMove = pixelsToMove;
    }
  },
  moveRight: function (sectionIndex) {
    var scrollViewport_width = $(window).width();
    var pixelsToMove = 0;
    $('#history-' + sectionIndex).scrollLeft(pixelsToMove + 100);
    pixelsToMove = pixelsToMove + 100;
    if (pixelsToMove >= scrollViewport_width) {
      pixelsToMove = scrollViewport_width;
    } else {
      pixelsToMove = pixelsToMove;
    }
  }
};
});

我想知道的是,我如何在ng-init中传递另一个值(如果可能的话),如下所示:

<div ng-repeat="values in Categories" id="history-{{$index}}" ng-init="sectionIndex = $index, tableID='history'">

这样我的第二个参数tableID就可以传递给我的函数了:

 moveRight: function (sectionIndex, tableID) {

所以我不再需要通过以下方式直接概述我的身份:

$('#history-' + sectionIndex).scrollLeft(pixelsToMove - 100);

但相反:

$(tableID + sectionIndex).scrollLeft(pixelsToMove - 100);

1 个答案:

答案 0 :(得分:1)

有一些方法可以做到这一点:我知道其中两个:p

1- 虚拟方式您可以将A data-yourVariable添加到您的代码中,如下所示:

   <div ng-repeat="values in Categories" id="history-{{$index}}" ng-init="sectionIndex = $index" data-table="history">

在你的ng-click中,你可以这样做:

        ng-click(sectionIndex,this.parent().data('table'));

2- 简单方式:您可以像这样在ng-init中传递一个对象:

      ng-init="{sectionIndex: $index, tableID:'history}"

注意:您必须在ng-init中使用(:)代替(=),因为您想将它用作对象

所以在你的ng-click中:

        ng-click(sectionIndex,tableID);

希望有所帮助