@Filoret256
начинающий JS developer

Как передать данные в контроллер после инициализации service-a?

Подскажите как правильно передать полученные данные в контроллер (или во view) ?
дано
//main.js
angular
	.module('app', []);

angular
	.module('app')
	.factory('myService', myService);

myService.$inject = ['$http'];

function myService($http){
	var result = {
			data = []
		};
	var init = function(){
		$http.get('/api/data')
			.success(function(data, status){
				if (status == 200) {
	             result.data = data;
                       } 
				 });
	};
	init();
	return result;
};

angular
	.module('app')
	.controller('main', mnCntr);
mnCntr.$inject = ['myService','$scope'];
function mnCntr(myService,$scope){
	$scope.somedata = myService.data;
};


//index.html
<html lang="en" ng-app="app">
<head>
</head>
<body >
	<div ng-controller='main'>
		<p>{{somedata}}</p>
	</div>
</body>
<script src="./libs/angular/angular.min.js"></script>
<script src="./js/main.js"></script>
</html>

по идее в сервис грузятся данные, контроллер их должен передать во view
данный пример конечно ничего не показывает т.к. получает данные по промису,
как сделать правильно чтоб показывало с сохранением схемы работы?
или это плохая схема? как тогда лучше сделать ? :)
  • Вопрос задан
  • 2354 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
$http возвращает обещание.

function serviceFactory($http) {
    
    return function () {
        $http.get('/api/data').then(function (response) {
             return response.data;
        }
    }
}

function mainController($scope, myService) {
    myService().then(data) {
        $scope.data = data;
    }
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@digrabok
Как то так:

(function () {
    'use strict';

    angular.module('app', [])
        .service('myResource', ['$resource', function($resource) {
            return $resource('/api/data');
        }])
        .controller('main', ['$scope', 'myResource', function($scope, myResource) {
            $scope.somedata = myResource.query();
        }])

})();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы