2013-11-15 3 views
0

я в настоящее время заселения $scope массивов, как это:

$scope.categories = []; 

$scope.getCategories = function() { 
    ItemService.getCategories().success(function(categories) { 
     $scope.categories = categories; 
    }); 
} 

$scope.getCategories(); 

это действительно самый простой способ сделать это?

+0

Где сложная часть? –

+0

Это не сложно, это просто код – Pixark

+1

Зачем завершать вызов службы в функции области видимости? Не нужно, если ваш интерфейс не запускает его через какое-либо событие. Кроме того, если вы хотите загружать категории при инициализации контроллера, вы должны посмотреть, как это сделать в функции разрешения маршрута или если вы не используете маршрут, а затем в функции запуска приложения. –

ответ

3

Вам действительно нужна функция getCategories? Если это единственное место, которое он вызвал, вы можете просто удалить и оставить вызов службы напрямую.

В противном случае ваш код будет таким же коротким, как и для использования обещаний, я думаю, если вы используете v1.2. До 1.2 угловые имели автоматическое обезвреживание. То есть, вместо того, чтобы

//$scope.getCategories = function() { 
    ItemService.getCategories().success(function(categories) { 
     $scope.categories = categories; 
    }); 
//} 

Вы могли бы сделать это вместо того, что кажется гораздо более изящным:

//$scope.getCategories = function() { 
    $scope.categories = ItemService.getCategories(); 
//} 

Проблемы с этим в виду, что это недавно было удалено, хотя - https://github.com/angular/angular.js/issues/4158. Я думаю, что в будущем можно будет добавить альтернативу, если есть хороший способ сделать это.

0

Вы можете просто использовать свойство вашего маршрутизатора resolve (при условии, что вы используете маршрутизатор) для ввода результатов от ItemService.getCategories() в ваш контроллер. resolve свойства блокируют маршрут от завершения до тех пор, пока они не будут полностью решены - он автоматически разворачивает обещания. Код будет выглядеть примерно так:

angular.module('MyModule').config(function ($routeProvider) { 
    $routeProvider.when('/mypage', { 
     templateUrl: '/mypage.html', 
     controller: 'MyController', 
     resolve: { 
      categories: function (ItemService) { return ItemService.getCategories(); } 
     } 
    }); 
}); 

angular.module('MyModule').controller('MyController', function (categories, $scope) { 
    $scope.categories = categories; 
}); 
Смежные вопросы