Я изо всех сил пытался понять «угловой» способ работы с использованием фабрик для представления данных ajax (я много делюсь между контроллерами, используя конфигурацию). Я провел обширное исследование, и все ответы, похоже, делятся на две категории:
- Используйте фабрику для представления данных, затем в контроллере извлеките данные и обновите фабрику:
{не предназначен для запуска angular
var app = angular.module('main', [])
app.factory('data', function($http){
var data = []
return data
})
app.controller('cntrl', [$scope, $http, data]){
$scope.data = data
$http.get('/data').success(
function(idata){
$scope.data = idata
)
}
Используйте фабрику для представления HTTP-запроса с обещанием, а затем назначьте эти данные $scope
var app = angular.module('main', []) app.factory('data', function ($http, $q){ var factory = {}; factory.getdata = function(){ var defer = $q.defer(); $http.get('/data').success(function(idata) { defer.resolve(idata); }) return defer.promise; } return factory; }); app.controller('cntrl', [$scope, data]){ $scope.data = [] data.getdata().then(function(idata) { $scope.data = idata }); }
У меня есть несколько проблем с этим, в первой категории фабрика выглядит мега-хромой и не добавляет особой ценности, и каждый контроллер должен иметь код для управления фабрикой. Со вторым контроллером фабрика очень сложна и на самом деле не хранит данные (для обмена между контроллерами), а просто представляет собой длинный способ написания http.get
Мой вопрос таков: как я могу использовать фабрику для представления своих данных и управлять манипулированием этими данными чистым способом? Я хотел бы сделать что-то вроде этого:
var app = angular.module('main',[])
app.factory('data', function($http){
var factory = {}
factory.data = []
factory.initialise = function(){
$http.get('/data').success(
function(data){
factory.data = data
}
)
}
return factory
})
app.controller('cntrlA', [$scope, data]) {
$scope.data = data.data
$data.initialise()
}
app.controller('cntrlB', [$scope, data]) {
$scope.data = data.data
}