2016-08-04 4 views
0

Как перенести эту функцию с контроллера в отдельный файл?Angularjs перемещая логику от контроллера

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

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

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

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

 
    $scope.data = {}; 
 

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

 
});

ответ

1

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

Мне нужно переместить только функцию в сервис или на фабрику. Функция работает прямо сейчас, но она слишком грязная. –

+0

@DanRomulus Итак, переместите его в 'myAppFactory' вместо' myHttpFn'? –

+0

http://pastie.org/10929423 что я делаю неправильно: ошибка: [$ injector: unpr] Неизвестный поставщик: corsServiceProvider <- corsService <- myAppCtrl. Так должно быть, как я заказываю услугу. –

0
var app=angular.module("myApp", []); 

app.controller('myAppCtrl', function (corsService, $scope, $http, dataUrl )   { 

corsService(); 


app.factory('corsService' ,function($http){ 

var data = {}; 

$http.get(dataUrl) 
.success(function (data) { 
    data.products = data; 
    console.log(data); 
}) 
.error(function (error) { 
data.error = error; 
}); 
return data; 
}); 

}); 
+0

Вы объявили новый модуль «MYAPP» вместо того, чтобы использовать геттер синтаксис –

+0

нет, это не я все еще использую тот же модуль –

+0

Нет, это не так, модуль уже был создан в файл для контроллера. Вы должны использовать 'angular.module ('myApp'). Factory ....' –