我的angularJS应用程序进入无限循环,同时在for中为我的API发出http请求

时间:2018-06-04 18:57:43

标签: angularjs angular-http

我一直试图解决这个问题,我认为我确实理解“为什么”。但即使知道我不能做出'这就是为什么!'。

好吧,我正在尝试做什么: 我想得到一个

的名字
User -> with the id of a teacher.

    'users' has Many 'teachers'
    'teachers' belongsTo One 'users'
    'lessons' belongTo One 'teachers'
    'teachers' hasMany 'lessons'

teachers Model =>
   id,
   user_id,
   created_at,
   updated_at

所以: 在我的AngularJS视图中,我希望通过教师ID获得所有课程。 (已经完成)

<div class="col-md-3 card-container-bottom" ng-repeat="lesson in lessons">
    <div class="card">
        <img ng-src="{{lesson.img}}" alt="Avatar" class="card-avatar">
        <div class="card-container">
            <div class="card-title">{{lesson.title}}</div> 
            <div class="card-instructor">{{lesson.teacher_id}}</div>
        </div>
    </div>
</div>

当我上课时,由于模特我只收到了teacher_id。 (但我想要他/她的全名)

为了解决这个问题,我提出了另一个HTTP请求来接收教师姓名和姓氏(来自用户模型)=&gt;如果我用邮差做,它完美地工作(因为只有一对一)。但是当我尝试通过angular

执行相同的请求时,会出现主要问题

正如我一直在阅读的那样,当您在ng-repeat中发出HTTP请求时,您的应用程序将会崩溃,因为它会在一个bucle中永远更新......或类似的东西(不太了解)。 / p>

无论如何,我做了以下代码: 在我看来:

{{getInstructor()}}

在我的控制器中:

var instructorsID = [];
$scope.getInstructor = function() {
    $scope.instructor.count = $(".card").length;

    for (var i=0; i<$scope.instructor.count; i++) {
        if (!instructoresID.find(x => x.id == $scope.lessons[i]["id"])){
            instructoresID.push({
                cat: $scope.category.id,
                id : $scope.lessons[i]["id"] 
            });
        }
    }
    $scope.instructors = instructorsID;  

这将保存所有categories_id和lessons_id 显示到视图中的课程,到数组instructorsID

现在,我有每节课的类别ID和课程ID

    for (var i=0; i<instructoresID.length; i++) {
    lessonService.getInstructorName(instructorsID[i]['cat'], instructorsID[i]['id'])
        .then(
            function(response) {
                var res = response.data.data;
                // alert(res.nombre)
                if (!instructorsID.find(x => x.ins == $scope.lessons[i]["ins"])){
                    instructorsID.push({
                        ins: res.nombre
                    });
                }
            },
            function(){
                alert('error');
                if (!instructorsID.find(x => x.ins == $scope.lessons[i]["ins"])){
                    instructorsID.push({
                        ins: 'error'
                    });
                }
            }
        );
    }

在我的服务中:

.service('lessonService', function ($http) {
   return {
      getInstructorName: function(categoryId, lessonId){
        return $http({
            method: 'GET',
            url: 'http://localhost:3000/api/v1/categories/'+categoryId+'/lessons/'+lessonId+'/teacherName',
            data: lessonId
        });
      }
   }
});

好吧,这些代码将进入一个无限循环,会破坏你的资源管理器。

所以,我的问题是如何使用angularJS从API获取这些数据。 提前谢谢!

0 个答案:

没有答案