Логика переноса Angularjs из контроллера

Как вынести эту функцию из контроллера в отдельный файл?

Это может быть простой вопрос, но я пытался сделать это с сервисами и фабриками, но я продолжаю делать что-то неправильно в отношении внедрения зависимостей или синтаксиса службы или фабрики.

Это контроллер:

angular.module("myApp", [])
.controller('myAppCtrl', function ($scope, $http) {

    (function() {
        //the function to be moved
        //do somthing
    })();

    $scope.data = {};

    $http.//......do something else

});


person Dan Romulus    schedule 04.08.2016    source источник


Ответы (2)


plunkr: (Заменена реальная ссылка API по запросу OP)

HTML:

<div ng-app="myApp">
  <div ng-controller="myAppCtrl">
    <ul>
    <li ng-repeat="product in data.products" ng-bind="product.name"></li>
    </ul>
  </div>
</div>

Javascript:

angular.module("myApp", [])
  .constant("dataUrl", "https://some-link.com")
  .controller('myAppCtrl', function($scope, corsService) {
    $scope.data = {};
    corsService.getData().then(function(data) {
      $scope.data.products = data;
    }).catch(function(error) {
      $scope.data.error = error;
    });
  });

angular.module("myApp")
  .factory('corsService', function($http, dataUrl) {
    return {
      getData: getData
    }

    function corsRequestEnabler() {
      //Enable CORS requests
    };

    function getData() {
      corsRequestEnabler();
      return $http.get(dataUrl)
        .then(function(response) {
          console.log('Response',  response);
          return response.data;
        }, function(error) {
          return error
        })
    }
  });
person Robin-Hoodie    schedule 04.08.2016
comment
Мне нужно переместить только функцию в сервис или фабрику. Функция работает прямо сейчас, но это слишком грязно. - person Dan Romulus; 04.08.2016
comment
@DanRomulus Так переместите его в myAppFactory вместо myHttpFn? - person Robin-Hoodie; 04.08.2016
comment
pastie.org/10929423 что я делаю неправильно при получении: Ошибка: [$injector:unpr] Неизвестный поставщик: corsServiceProvider ‹- corsService ‹- myAppCtrl . Так должно быть, как я ввожу службу. - person Dan Romulus; 04.08.2016
comment
у вас есть несколько минут, чтобы поговорить об этом в чате? - person Dan Romulus; 04.08.2016
comment
@DanRomulus Конечно, просто киньте мне ссылку - person Robin-Hoodie; 04.08.2016
comment
Давайте продолжим обсуждение в чате. - person Dan Romulus; 04.08.2016

person    schedule
comment
Вы объявили новый модуль «myApp» вместо использования синтаксиса геттера - person Robin-Hoodie; 04.08.2016
comment
Нет, модуль уже создан в файле для контроллера. Вы должны использовать angular.module('myApp').factory.... - person Robin-Hoodie; 04.08.2016
comment
да, я продолжаю получать [$injector:unpr] Неизвестный поставщик: corsServiceProvider ‹- corsService ‹- myAppCtrl . я продолжаю делать что-л. неправильное внедрение сервиса в модуль - person Dan Romulus; 04.08.2016
comment
это потому, что вам нужно ввести $http - person Vikash Kumar; 04.08.2016
comment
Мне просто нужно переместить функцию, которая работает так, как она есть, но слишком грязная, чтобы быть в контроллере. Функция не использует никаких сервисов. - person Dan Romulus; 04.08.2016
comment
да, я обновил ответ, если вы хотите использовать конкретную услугу, которую вам нужно ввести. как будто вы вводите $http в свой контроллер - person Vikash Kumar; 04.08.2016
comment
Я сделал это, но продолжаю получать ошибку инжектора: [$injector:unpr] Неизвестный провайдер: продолжайте делать что-то неправильно - person Dan Romulus; 04.08.2016
comment
Я не хочу добавлять службу $http в фабрику corsService. Я просто хочу добавить функцию, которую нужно переместить в отдельный файл .js, внедрить ее в мой контроллер или основной модуль и запустить. - person Dan Romulus; 04.08.2016