我正在使用angular-meteor我已经删除了autopublish
包。我无法弄清楚为什么第一个查询返回undefined
,以及为什么它又运行了两个查询,总共三个查询。
基本上,我想运行一次查询,并让它的数据成功返回,然后用结果填充页面。我怎样才能做到这一点?
在我使用的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
在服务器端的出版物中。我想根据传入的 id 返回一个仅包含项目对象的游标$stateParams
:
Meteor.publish("project", function(projectId){
console.log("projectId: ", projectId);
return Projects.find({ _id: projectId });
});
在我的客户端projectsDetail
控制器中。我正在关注订阅示例:
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);
});
}]);
客户端控制台日志显示查询运行了 3 次。1st 未定义,2nd 找到项目,3rd 找到同一个项目:
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