将$ scope变量从Controller传递到Service

时间:2016-07-12 19:09:19

标签: javascript angularjs ionic-framework

目前在Ionic中编写一个原型应用程序,对于离子和角度来说都是新手。我已经编写了一个包含大约25个对象的小JSON API,我已经能够在我们称之为“Library”的页面上显示它们的列表,我现在正在尝试使用这些列表项作为链接我们称之为“课程”的每个项目的单独页面。变量$ scope.lessonId在控制器中正确设置,但在服务中设置为undefined。是否有可能实现我正在尝试的目标,或者我只是做错了?

.controller('LibraryLessonCtrl', function($scope, $stateParams, LessonService) {
    $scope.lessonId = $stateParams.libraryId;
    console.log($scope.lessonId);

    LessonService.getLessonId()
       .then(function(response){
       $scope.lesson = response;

       console.log($scope.lesson);
  });
})

.service ('LessonService', function($http){
    return { getLessonId: function() {
        return $http.get('api/postsAPI.json')
            .then(function (response, lessonId) {

                console.log(lessonId);

                for(i=0;i<response.data.length;i++){
                    if(response.data[i].post_id == lessonId){
                        return response.data[i];
                    }
                }
            });
        }
    };
})

2 个答案:

答案 0 :(得分:1)

如果您想使用服务中的值,则必须将$ scope.lessonId变量传递给服务调用。

.controller('LibraryLessonCtrl', function($scope, $stateParams, LessonService) {
   $scope.lessonId = $stateParams.libraryId;
   console.log($scope.lessonId);

   LessonService.getLessonId($scope.lessonId)
      .then(function(response){
        $scope.lesson = response;
        console.log($scope.lesson);
   });
}).service ('LessonService', function($http){
return { getLessonId: function(lessonId) {
    return $http.get('api/postsAPI.json')
        .then(function (response) {

            console.log(lessonId);

            for(i=0;i<response.data.length;i++){
                if(response.data[i].post_id == lessonId){
                    return response.data[i];
                }
            }
        });
    }
};

})

答案 1 :(得分:0)

您可以通过将Id传递给服务并将其存储在那里来实现。请尽量不要将$ scope变量传递给服务,因为这不是一个好习惯。你可以这样做:

 .service ('LessonService', function($http){
    var lessionId;
    return { 
        /*other methods*/
        setLessionId: function(id) {
            lessionId = id;
        },
        getLessionId: function(){
          return lessionId;
        }

    };
})