ArturAralin
@ArturAralin
Программист, Музыкант

Как разделить логику на AngularJS?

Здравствуйте! Поискав в Google и не найдя ничего толкового, пишу сюда! Вопрос в следующем: Как разделить логику в AngularJS?

Мой код
function MainCtrl($scope, $http) {

	$scope.user = function($http) {
		/* Variables */
		var auth = false; //auth status
		var id = 33; //user id
		var name = ''; //user name
		var lname = ''; //last user name

		this.abc = 'some text';
		/* Methods */
	}; 
	/* end scope user */

	/* init */
	console.log($scope);
}

Переменную "abc" видно в $scope, а вот к переменным внутри анонимной функции достучаться не выходит.
console.log($scope.user.id); //выдает undefined
  • Вопрос задан
  • 3371 просмотр
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
я думаю вам рано браться за angular, раз вы еще не знаете что такое замыкания, объекты, функции, контекст функции...

$scope.user = {
    auth: false,
    id: 33,
    name: '',
    lname: ''
    abs = 'some text'
}


но на будущее: старайтесь инкапсулировать логику в сервисы. То есть если у вас в контроллеры инджектятся сервисы типа $http, то что-то явно пошло не так на этапе проектирования. Это все должно использоваться внутри ваших сервисов, и контроллеры о том откуда берутся данные знать ничего не должны.

В идеале это должно быть как-то так:
angular.module('app', [])

.controller('MainCtrl', function ($scope, userRepository) {
    userRepository.getUser().then(function (user) {
          $scope.user = user;
    });
})

.factory('userRepository', function ($http, $q) {
    return {
        // метод возвращающий данные пользователя
        getUser: function() {
              // забираем данные с сервера
              return $http(/** опции запроса */).then(function (response) {
                  return response.data; // возвращаем данные пользователя
              });
        }
    }
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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