在ng-repeat

时间:2015-07-27 14:07:56

标签: javascript angularjs

我正在构建一个iOS应用程序的后端,它是使用AngularJS制作的,因此管理员可以随意管理来自该网站的数据。数据由多个不同的元素组成。其中一个元素就是Boxes。每个Box都包含一个指向Present的指针,每个Present都有一个名称。所以它就像Box - > Present.name,如果你知道我的意思。

我正在处理的问题是我需要在列表中显示Boxes(在前面的代码示例中不要担心这个,因为我简化了它),以及每个列表的内容item应该是属于每个Box的Present的名称。数据必须从Parse.com获得,所以我需要调用一个函数,给一个Box检索它的Present然后允许得到它的名字。

这就是我现在所拥有的:

<div ng-repeat="box in boxes">
    <span ng-init="getPresentFromObject(box)">
        {{relatedPresent.get("name")}}
    </span>
</div>

问题很明显。我使用$scope.relatedPresent来保存每个Present的值(每个Box一个),所以它每次迭代都会更新它的值,最后我会以一个元素列表结束,所有这些都是它们呈现相同的名称,即最后一个呈现的名称,因为它是最后更新$scope.relatedPresent变量。

我希望将这个值与更改隔离开来,因此每个Box都有自己的Present,并且名称在其他迭代中不会有所不同。我尝试过AngularJS指令,但无法使它们工作,所以我被卡住了。实现这一点必须非常简单,但我找不到方法。

更新

我从ng-init调用的函数进行异步调用,因此我不确定是否可以将该值返回给HTML代码中ng-init内的对象。

$scope.getPresentFromObject = function (object) {

    getPresentObjectFromObject(object)
    .then(function (thePresent) {
        $scope.relatedPresent = thePresent;
        // if I return here the value goes nowhere
    },
    function (error) {
        // error stuff
    });

    // if I return here then I lost the value because it's async
}

我希望现在的流程更加清晰。

2 个答案:

答案 0 :(得分:0)

您是否尝试过为ng-init赋值?

<div ng-repeat="box in boxes">
    <span ng-init="present = getPresentFromObject(box)">
        {{present.get("name")}}
    </span>
</div>

有关详细信息,请参阅ng-init docs

答案 1 :(得分:0)

如果您的数据在加载Presents后不易发生变化,您可以考虑对relatedPresent变量进行一次性绑定。它看起来像这样:

<div ng-repeat="box in boxes">
    <span ng-init="getPresentFromObject(box)">
        {{::relatedPresent.get("name")}}
    </span>
</div>

但是,通过这种方式,您可以放弃更新模型和查看更改的所有好处。因此,这取决于您的应用程序的逻辑如何工作,如果这是一个解决方案。