【问题标题】:Add multiple object in angularjs scope variable在 angularjs 范围变量中添加多个对象
【发布时间】:2026-02-14 15:30:01
【问题描述】:

我正在处理画廊和图片。我正在使用 Flask、AngularJS、MongoDB(和 mongoengine)。我通过 API 显示了我的所有对象。

我有两种对象: - 画廊对象由 id:int、title:string、owner:string、date:string、content:array[] 等定义... - 图片对象由 id:int、title:string、owner:string、date:string 等定义...

在一个数组的画廊内容中,我得到了画廊的所有 id。 [MongoDB示例][1]

当用户点击相关图库时,我尝试在 HTML 页面模板中列出所有图片。 为此,我在控制器中使用 $scope 变量,在 HTML 端使用 ng-repeat。

控制器

    $scope.gallery = Galleries.get({id: $routeParams.id}, function (gallery) {
        for (var i = 0; i < gallery.content.length; i++){
            gallery.picture = Picture.get({id: $scope.gallery.content[i].split('-')[1]});
        }
    });

HTML

    <tr ng-repeat="pict in gallery">
        <td>{{pict.fileID}}</td>
        <td>{{pict.legend}}</td>
    </tr>

很遗憾,只显示了内容中的最后一张图片。范围内的全局变量不会在每个内容索引处提供。

如何将所有图片对象放在一个范围变量中,以便在 HTML 视图中使用 ng-repeat?

提前致谢, 祝你有美好的一天。

【问题讨论】:

  • 你能展示你的函数Galleries.getPicture.get的代码吗?
  • 嗨,这可能有点棘手,但我可以使用数组吗?

标签: javascript angularjs angularjs-scope angularjs-ng-repeat


【解决方案1】:

get 函数由 API (mongoengine) 提供:

@app.route('/api/galleries/<id>', methods=('GET', 'POST', 'DELETE'))
 def galleries(id):
     return handle_request(Galleries, id)


@app.route('/api/picture/<id>', methods=('GET', 'POST', 'DELETE'))
def picture(id):
    return handle_request(Picture, id)

那么handle_request看起来像:

def handle_request(model, id):
    def get_object():
        try:
            obj = model.objects(id=id).first()
        except:
            raise NotFound
        if not obj:
            raise NotFound
        return obj

    if request.method == 'GET':
        check_allowed('READ', model)
        try:
            return jsonify(get_object().to_dict())
        except NotFound:
            abort(404)
    elif request.method == 'POST':
        check_allowed('UPDATE', model)
        try:
            obj = get_object()
        except NotFound:
            obj = model(id=id)
        obj.from_dict(request.json)
        obj.save()
        return jsonify(obj.to_dict())

【讨论】: