简体   繁体   English

AngularJS下一个和上一个数组值

[英]AngularJS Next and Previous Array Values

What I'm trying to achieve: 我想要达到的目标:
Change state id when the user clicks next or previous buttons. 当用户单击下一个或上一个按钮时,更改状态ID。 Each state is assigned an id which is within an array, when clicking next or previous the state id needs to know which is the next or previous id within the array. 每个状态都被分配了一个位于数组内的ID,当单击下一个或上一个ID时,需要知道哪个是数组中的下一个或前一个ID。

Current Problem: 当前问题:
After spending many hours yesterday, I managed to get the next and previous buttons working but instead of picking up the state id from the array it was getting the array index number. 在昨天花费了多个小时之后,我设法使下一个和上一个按钮正常工作,但是与其从数组中获取状态ID,不如获取数组索引号。

The test below show this array ["1", "2", "4"], so if I was on state '2' the next page would be '4' and the previous would be '1', instead of '0','1','2'! 下面的测试显示此数组[“ 1”,“ 2”,“ 4”],因此,如果我处于状态'2',则下一页将是'4',而上一页将是'1',而不是'0 ','1','2'!

I would really appreciate some help on this, I don't mind having to rewrite all my code to figure this out! 我真的很感谢在此方面的一些帮助,我不介意必须重写我的所有代码来解决这个问题!

Thank you in advance for all the support! 预先感谢您的支持!

Controller JS 控制器JS

  // -- Current Page ID, '1'-- //
  var currentID = $stateParams.id;
  // -- Body Type, 'triangle' -- //
  var bodyType = $scope.$storage.userData.bodyType.bodyType;
  // --  Dress Array, [{"id": "1", "bodyType": "triangle"},{"id": "2", "bodyType": "triangle"},{"id": "3", "bodyType": "round"},{"id": "4", "bodyType": "triangle"}] --//
  var dressArray = $scope.$storage.appData.dresses;
  // -- Remove anything that doesn't match the current body Type e.g Remove 'round' -- //
  var removeRound = $filter('filter')(dressArray, function(value, index) {return value.bodyType == bodyType;});
  // -- Dress Array -- //
  $scope.dressArray = [];
  // -- Push each filter value to Array, ["1", "2", "4"] -- //
  angular.forEach(removeRound, function(value, key) {
    $scope.dressArray.push(value.id);
  });
  // -- Console Test, ["1", "2", "4"] -- //
  console.log($scope.dressArray);
  // -- If currentID = '1', The next button should display '2' -- //
  $scope.nextDress = function() {
    var next = parseInt(currentID) + 1 > dressArray.length ? 0 : parseInt(currentID) + 1;
    $state.go('main.rail', {id: next });
  };
  // -- If currentID = '2', The next button should display '4'--//
  $scope.previousDress = function() {
    var prev = parseInt(currentID) - 1 < 0 ? dressArray.length - 1 : parseInt(currentID) - 1;
    $state.go('main.rail', {id: prev });
  };

HTML 的HTML

<li class="next"><md-button ng-click="nextDress()">Next</md-button></li>
<li class="previous"><md-button ng-click="previousDress()">Previous</md-button></li>

在此处输入图片说明

Final Update (Answer) @SarjanDesai 最终更新(答案) @SarjanDesai

  var currentID = $stateParams.id;
  var bodyType = $scope.$storage.userData.bodyType.bodyType;
  var dressArray = $scope.$storage.appData.dresses;
  var removeRound = $filter('filter')(dressArray, function(value, index) {return value.bodyType == bodyType;});
  var newDressArray = [];
  angular.forEach(removeRound, function(value, key) {
    newDressArray.push(value.id);
  });
  var currentIndex = newDressArray.indexOf(currentID.toString());
  var next = (currentIndex + 1) > newDressArray.length ? newDressArray[newDressArray.length - 1] : newDressArray[currentIndex + 1];
  var prev = (currentIndex - 1) < 0 ? 0 : newDressArray[currentIndex - 1];
  if(prev === 0 || prev === undefined || prev === null){
    $scope.hidePrevButton = {
      active: true
    };
  }
  if(next === 0 || next === undefined || next === null){
    $scope.hideNextButton = {
      active: true
    };
  }
  $scope.nextDress = function() {
    $state.go('main.rail', {'id': next});
  };
  $scope.previousDress = function() {
    $state.go('main.rail', {'id': prev});
  };
  //console.log(newDressArray);
  //console.log('Next: ' + next);
  //console.log('Current: ' + currentID);
  //console.log('Previous: ' + prev);

Seeing the HTML that generates your button would be helpful. 查看生成按钮的HTML会有所帮助。 But as far as I can see something like <button>{{dressArray[currentId].id}} </buuton> should show the array value at index currentId 但据我所见,类似<button>{{dressArray[currentId].id}} </buuton>应该在索引currentId处显示数组值

What below code does is get current index of currentID and check the avaibility of next or previous value for previous button and for next button. 下面的代码所做的是获取currentID当前索引,并检查previous一个按钮和下一个按钮的nextprevious值的可用性。 If next value not available, it set to last value and for previous button if previous value is not available, then set it to first value of array. 如果下一个值不可用,则将其设置为最后一个值;如果上一个值不可用,则将其设置为一个按钮,然后将其设置为数组的第一个值

$scope.nextDress = function() {
  var currentIndex = $scope.dressArray.indexOf(currentID.toString());
  var next = (currentIndex + 1) > $scope.dressArray.length ? $scope.dressArray[dressArray.length - 1] : $scope.dressArray[currentIndex + 1];
  $state.go('main.rail', next);
};
// -- If currentID = '2', The next button should display '4'--//
$scope.previousDress = function() {
  var currentIndex = $scope.dressArray.indexOf(currentID.toString());
  var prev = (currentIndex - 1) < 0 ? $scope.dressArray[0] : $scope.dressArray[currentIndex - 1];
  $state.go('main.rail', prev);
};

Look for demo Example: 查找演示示例:

 angular.module('myApp', []).controller('myCtrl', ['$filter', '$scope', function($filter, $scope) { $scope.myclick = function() { var currentID = 1; console.log('current state : ' + currentID); var bodyType = 'triangle'; var dressArray = [{ "id": "1", "bodyType": "triangle" }, { "id": "2", "bodyType": "triangle" }, { "id": "3", "bodyType": "round" }, { "id": "4", "bodyType": "triangle" }]; var removeRound = $filter('filter')(dressArray, function(value, index) { return value.bodyType == bodyType; }); var dressArray = []; angular.forEach(removeRound, function(value, key) { dressArray.push(value.id); }); console.log(dressArray); nextDress = function() { var currentIndex = dressArray.indexOf(currentID.toString()); var next = (currentIndex + 1) > dressArray.length ? dressArray[dressArray.length - 1] : dressArray[currentIndex + 1]; console.log('next dress : ' + next); }; // -- If currentID = '2', The next button should display '4'--// previousDress = function() { var currentIndex = dressArray.indexOf(currentID.toString()); var prev = (currentIndex - 1) < 0 ? dressArray[0] : dressArray[currentIndex - 1]; console.log('prev dress : ' + prev); }; previousDress(); nextDress(); } } ]); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="myApp" ng-controller="myCtrl"> <button ng-click="myclick()">Button</button> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM