Meteor:如何让 dburles:collection-helpers 与 Angular 一起工作?

Meteor: How do I make dburles:collection-helpers work with Angular?

我正在尝试将 urigo:angulardburles:collection-helpers 一起使用,但我不知道语法应该是什么。

这是我使用 Meteor 时的结果:

Template.books.helpers({  
    books: function() {
        return Books.find();
    },
    authors: function() {
        return Authors.find();
    },
    author: function() {
        return Authors.findOne(this.authorId);
    }
});

并且在视图中:

<template name="books">  
    <h1>Books!</h1>
    <ol>
        {{#each books}}
            <li>{{name}} by {{author.name}}</li>
        {{/each}}
    </ol>
</template>

效果很好。

现在我已经添加了Angular并且我正在更改为这个(作者不起作用):

$scope.books = $meteor.collection(function(){
    return Books.find({})
});

$scope.authors = $meteor.collection(function(){
    return Authors.find({})
});

$scope.author = $meteor.collection(function(){
    return Authors.findOne(this.authorId);
});

对此的看法:

<li ng-repeat="book in books">{{book.name}} by {{author.name}}</li>

谢谢

在 angular 中,您将结果绑定到 $scope.author 而不是函数本身。当你打电话时

$scope.author = $meteor.collection(function() {
    return Authors.findOne(this.authorId);
}

this指的是控制器(实际上我认为它指的是收集方法......无论哪种方式),而不是这本书。 此外,angular-meteor 没有 findOne 方法,您只需添加 {limit: 1} 或使用 $meteor.object

要获得与您正在执行的操作类似的结果,您可以在控制器中执行以下操作:

function MainController($scope, $meteor) {
    $scope.books = $meteor.collection(function () {
        return Books.find({});
    });

    $scope.authors = $meteor.collection(function () {
        return Authors.find({});
    });

    $scope.author = function (book) {
       return $meteor.object(Authors, book.authorId, false);
    }
}

$meteor.object 是您将用来代替 findOne 的内容。现在在 html 中你需要调用函数:

<li ng-repeat="book in books">{{book.name}} by: {{author(this.book).name}}</li>

函数是returns作者对象,当然你访问的是名字。

这是一个Meteor Pad