Я пытаюсь узнать об использовании фабрики с контроллером. Я видел один пример с:Угловая фабрика и контроллер
angular.module('flapperNews')
.factory('posts', ['$http', function($http) {
var o = {
posts: []
}
o.getPosts = function() {
return $http.get('api/posts').success(function(data) {
return data
})
};
o.create = function(post) {
return $http.post('api/posts', post).success(function(data) {
o.posts.push(data);
})
};
return o
}])
Когда я console.log (o.getPosts()), то возвращается следующее:
Promise {$$state: Object}
$$state
:
Object
pending
:
undefined
processScheduled
:
false
status
:
1
value
:
Object
config
:
Object
data
:
Array[6]
0
:
Object
_id
:
"576d4904f2aa867dadb7b286"
link
:
"aaa"
title
:
"nice weather in Australia"
upvotes
:
0
__proto__
:
Object
__defineGetter__
:
__defineGetter__()
__defineSetter__
:
__defineSetter__()
__lookupGetter__
:
__lookupGetter__()
__lookupSetter__
:
__lookupSetter__()
constructor
:
Object()
hasOwnProperty
:
hasOwnProperty()
isPrototypeOf
:
данные, которые я хотел находится под массив [6], который находится в состоянии $$, кто-нибудь знает, что это такое и как обычно извлекают эти данные? Данные должны быть переданы в мой контроллер, как так:
$stateProvider
.state('home', {
url: '/home',
templateUrl: 'views/posts.html',
controller: 'PostCtrl',
controllerAs: 'posts',
resolve: {
postPromise: ['posts', function(posts) {
console.log(posts.getPosts())
return posts.getPosts();
}]
}
});
Примечание: Это взято из интернет-учебника. Был бы очень признателен, если кто-то может пролить свет на это, поскольку я новичок на фабрике и т. Д. Текущий код ничего не возвращает моему взгляду, можете ли вы сказать мне, где я поступил неправильно?
Отредактировано/добавлено: Это реализация контроллера. Когда я console.log (posts.posts), он возвращает пустой массив []. Есть идеи?
angular.module('flapperNews')
.controller('PostCtrl', [
'$scope','posts',
function($scope,posts){
$scope.posts=posts.posts;
$scope.incrementUpvotes=function(post){
post.upvotes+=1
}
$scope.addPost = function(){
if(!$scope.title || $scope.title === '') { return; }
posts.create({
title: $scope.title,
link: $scope.link,
});
$scope.title = '';
$scope.link = '';
};
}]);
Я следую за tute здесь: https: // thinkster.io/mean-stack-tutorial # wiring-all-up, но postPromise не был введен в какой-либо контроллер. Поэтому я предполагаю, что учебник не является полным. Извините, я объяснил неправильно, posts.getPosts() не был реализован ни в одном контроллере, он существует только под разрешенным режимом stateprovider, так что сообщения появляются автоматически при загрузке страницы. Я попробую все ваши предложения и посмотрю, как это происходит. Спасибо, кучи !! –
Вам нужно ввести postPromise в свой контроллер ... у него есть данные, возвращенные с вашего почтового сервиса. Посмотрите на раздел ** «Окончание комментариев» ** в своем учебнике, затем посмотрите на 3-й и 4-й фиолетовые боксы, и вы увидите, что он вводит ** пост ** в контроллер. ** post ** - это не служба, но объект, содержащий данные, загруженные в маршрут, разрешает. :) – btinoco
Я добавил код контроллера выше - только служебные «сообщения» были введены в соответствии с учебником, но не «postPromise». По-видимому, это так, что данные сообщений не выходят за рамки, а другие контроллеры могут использовать данные путем ввода служебных «сообщений». В разрешении кода: { postPromise: ['posts', function (posts), что является первым аргументом 'posts'? Я прочитал другие статьи, но этот аргумент всегда не учитывается. , Я не думаю, что я намерен внедрить службу «posts» и postPromise в контроллер. –