Я использую angular-meteor Я удалил пакет autopublish
. Я не могу понять, почему первый запрос возвращает undefined
, и почему он запускает еще два запроса для всего трех.Почему запрос выполняется 3 раза, и как я могу обеспечить, чтобы запрос выполнялся один раз, и результаты гарантировали, что данные не будут определены ранее?
В принципе, я хочу запустить запрос один раз и вернуть его данные, а затем заполнить страницу результатами. Как я могу это сделать?
В моей routes.js
файл, который использует angular-ui-router
:
angular.module('projectApp').config(['$urlRouterProvider', '$stateProvider', '$locationProvider',
function($urlRouterProvider, $stateProvider, $locationProvider){
$locationProvider.html5Mode(true);
$stateProvider
.state('projectDetail', {
abstract: true,
url: '/experience/projects',
templateUrl: 'client/projects/views/project-layout.ng.html',
controller: 'ProjectDetailsCtrl'
})
.state('projectDetail.cards', {
url: '/:projectId',
views: {
'cards': {
templateUrl: 'client/projects/views/partials/project-cards.ng.html',
controller: 'ProjectDetailsCtrl'
},
'toolbar': {
templateUrl: 'client/projects/views/partials/project-toolbar.ng.html',
controller: 'ProjectDetailsCtrl'
}
}
});
}]);
В моей projects.js
публикации на стороне сервера. Я хочу, чтобы вернуть курсор, который просто содержит объект проекта на основе идентификатора передается из $stateParams
:
Meteor.publish("project", function(projectId){
console.log("projectId: ", projectId);
return Projects.find({ _id: projectId });
});
В моем контроллере стороны клиента projectsDetail
. Я следую subscribe пример:
angular
.module('projectApp')
.controller("ProjectDetailsCtrl", ['$scope', '$stateParams', '$meteor',
function($scope, $stateParams, $meteor){
// subscribing to publication here
$scope.$meteorSubscribe('project', $stateParams.projectId).then(function(subscriptionHandle){
$scope.project = $scope.$meteorObject(Projects, $stateParams.projectId);
console.log("scope project is ready: ", $scope.project);
});
}]);
Клиентский журнал консоль показывает, что запрос побежал три раза. Первый не определен, второй находит проект, а третий находит тот же проект:
scope project is ready:
SubObject {$$collection: C…s._…n.ns.Collection, $$options: undefined, $$id: undefined, $$internalProps: Array[15], autorunComputation: T…r.Computation} projectDetails.js?b1b67b05e090e366d0853cb2a75b34cc7f75a5d0:10
scope project is ready:
SubObject {_id: "zQ8Y938F6HKKqjSdA", image: "/images/large-img-placeholder.jpg", title: "project 1", description: "<p>project 1 description</p>", projectRole: Array[4]…}
projectDetails.js?b1b67b05e090e366d0853cb2a75b34cc7f75a5d0:10
scope project is ready:
SubObject {_id: "zQ8Y938F6HKKqjSdA", image: "/images/large-img-placeholder.jpg", title: "project 1", description: "<p>project 1 description</p>", projectRole: Array[4]…}
Серверный console.log показывает запрос выполняется 3 раза, а также:
I20150708-14:36:10.967(-4)? projectId: null
I20150708-14:36:10.976(-4)? projectId: zQ8Y938F6HKKqjSdA
I20150708-14:36:10.980(-4)? projectId: zQ8Y938F6HKKqjSdA
Интересно, если это происходит потому, что тот же контроллер ProjectDetailsCtrl вызывается в каждом из видов: –