我正在构建一个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
}
我希望现在的流程更加清晰。
答案 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>
但是,通过这种方式,您可以放弃更新模型和查看更改的所有好处。因此,这取决于您的应用程序的逻辑如何工作,如果这是一个解决方案。