2016-07-12 7 views
0

В настоящее время написано прототип приложения в ионном, довольно новое для ионного и углового. Я написал небольшой JSON API с примерно 25 объектами в нем, я смог отобразить их список на странице, которую мы будем называть «Библиотека», теперь я пытаюсь использовать эти элементы списка в качестве ссылок на отдельную страницу для каждого элемента, которую мы назовем «уроком». Переменная $ scope.lessonId устанавливается правильно в контроллере, но устанавливается как неопределенная в службе. Можно ли достичь того, что я пытаюсь сделать, или я просто делаю это неправильно?

.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]; 
        } 
       } 
      }); 
     } 
    }; 
}) 
+0

передать его в вызове метода 'LessonService.getLessonId()' и добавить параметр в методе, как 'getLessonId: функция (lessonId)' –

+0

Вы на правильном пути с разделением логики между контроллером и сервис, но вы должны четко определить границы, чтобы у вас была четкая SOS, а это значит, что служба не должна знать ничего о области $. Вместо этого извлеките то, что необходимо в контроллере, и передайте эти данные службе в виде параметров (ов) любых операций (методов), которые могут быть вызваны. В этом случае в качестве параметра к методу службы должен находиться контроллер passe '$ scope.lessionId'. – Igor

ответ

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]; 
       } 
      } 
     }); 
    } 
}; 

})

+0

Красивая, спасибо :) –

0

Вы можете сделать это путем передачи Id обслуживать и хранить его там. Пожалуйста, постарайтесь не передавать переменную $ scope для обслуживания, поскольку это не очень хорошая практика. Вы можете сделать следующее:

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

    }; 
}) 
Смежные вопросы