서비스에서 데이터를로드하고 $ q를 사용하여 뷰를 업데이트하려고하는데 작동하지 않습니다. 컨트롤러 내부에 http 호출을 넣으면 작동하지만 서비스의 일부가되기를 원합니다.
어떤 도움이 필요합니까? 또한, 약속 대신에 이것을하는 더 좋은 방법이 있습니까?
아래의 데모 및 코드.
---------- Fiddle Demo Link ----------
보기
<div ng-init="getData()">
<div ng-repeat="item in list">{{item.name}}</div>
</div>
컨트롤러
.controller('ctrl', ['$scope', 'dataservice', '$q', function ($scope, dataservice, $q) {
$scope.list = dataservice.datalist;
var loadData = function() {
dataservice.fakeHttpGetData();
};
var setDataToScope = function() {
$scope.list = dataservice.datalist;
};
$scope.getData = function() {
var defer = $q.defer();
defer.promise.then(setDataToScope());
defer.resolve(loadData());
};
}])
서비스
.factory('dataservice', ['$timeout', function ($timeout) {
// view displays this list at load
this.datalist = [{'name': 'alpha'}, {'name': 'bravo'}];
this.fakeHttpGetData = function() {
$timeout(function() {
// view should display this list after 2 seconds
this.datalist = [{'name': 'charlie'}, {'name': 'delta'}, {'name': 'echo'}];
},
2000);
};
return this;
}]);
IIRC,'는 HTTP의 .then' 요청 자체가, 당신은 –
result.data'없이 바이올린에서 잘 작동하는 것 같다'원하는'예 –
을 .data'의 결과지만, 바이올린은 HTTP 요청을하지 않습니다. :) –