On click How can I cycle through JSON one by one in AngularJS

北战南征 提交于 2020-01-17 04:52:08

问题


Creating my first directive as an exercise in angular —making more or less a custom carousel to learn how directives work.

I've set up a Factory with some JSON data:

directiveApp.factory("Actors", function(){
var Actors = {};
Actors.detail = {
    "1": {
      "name": "Russel Brand",
      "profession": "Actor",
      "yoga": [
        "Bikram",
        "Hatha",
        "Vinyasa"
      ]
    },
    "2": {
      "name": "Aaron Bielefeldt",
      "profession": "Ambassador",
      "yoga": [
        "Bikram",
        "Hatha",
        "Vinyasa"
      ]
    },
    "3": {
      "name": "Adrienne Hengels",
      "profession": "Ambassador",
      "yoga": [
        "Bikram",
        "Hatha",
        "Vinyasa"
      ]
    }
  };
  return Actors;
});

And an actors controller:

function actorsCtrl($scope, Actors) {
    $scope.actors = Actors;
  }

And am using ng-repeat to display the model data:

<div ng-controller="actorsCtrl">
  <div ng-repeat="actor in actors.detail">
    <p>{{actor.name}} </p>
  </div>
      <div ng-click="next-actor">Next Actor</div>
</div>

1) How do I only display the actor's name in the first index of my angular model actors.detail?

2) How do I properly create a click event that will fetch the following index and replace the previous actor.name

User flow:

  • Russell Brand is Visible
  • click of next-actor ->Russell Brand's name is replaced with Aaron Bielefeldt

回答1:


Since you only want the current user, the ng-repeat is not what you want to use, since that would be for each element in the data;

You would want to keep track of the index you are looking at in the scope, and increment that.

<div ng-controller="TestController">
    {{data[current].name}}
    <div ng-click="Next();"> NEXT! </div>
</div>

Where in the controller we also have these set up, where data is your actors:

$scope.current = 0;
$scope.Next = function() {
    $scope.current = ($scope.current + 1) % $scope.data.length;
};

Here's a fiddle where it's done.




回答2:


I would change my serivce to return a single actor and maintain the index in the controller. something like this. This is an incomplete solution - you need to take care of cycle etc...



来源:https://stackoverflow.com/questions/20439439/on-click-how-can-i-cycle-through-json-one-by-one-in-angularjs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!