我有两个对象:
$scope.messages = {'to' => '1'};
$scope.users = {500 : 'id' => '1', 'name' => 'Dana' };
HTML模板中的ng-repeat
:
<div class="user-item" ng-repeat="message in messages">
{{users[{{messages.to}}].name}}
</div>
这段代码不起作用:
{{users[{{messages.to}}].name}}
答案 0 :(得分:3)
由于您在messages
上进行迭代,并且在每次迭代中都有message
对象,因此正确的代码为:
{{users[message.to].name}}
另外,由于上面的代码会查找users
而我在您的示例中没有看到,因此我对您的users[1]
对象不太确定。确保它存在,如果不存在,则将users对象重新映射到一个对象数组中,其中每个索引都是用户的id。
这是一个简单的例子(注意我必须用PHP(?)表示法修复/重构对象):
angular.module('app', [])
.controller('Ctrl', function($scope){
$scope.messages = [{'to': '1'}, {'to': '1'}, {'to': '2'}, {'to': '0'}, {'to': '3'}];
$scope.users = [
{'name': 'Dana' },
{'name': 'Sana' },
{'name': 'Xana' },
{'name': 'Lana' }
];
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app" ng-controller="Ctrl">
<div class="user-item" ng-repeat="message in messages">
{{users[message.to].name}}
</div>
</div>
&#13;
答案 1 :(得分:2)
您已经尝试从{{}}内部评估某些内容(在已评估的内容中进行评估。
除此之外,您还应该包含您所获得的任何错误以及哪些错误无效。如果您在Chrome中点击了F12,则可以看到Javascript控制台。该信息有助于您尝试解决问题。
我不明白为什么你在只持有一个值的东西上使用ng-repeat,然后你在代码中使用复数。
当然,你会想要
{{users[message.to].name}}
而不是消息 s ,因为您为该变量中的每条消息 s 提取了一个消息项。
答案 2 :(得分:2)
双花括号表示某些东西应该被解释为角度表达式。没有必要嵌套它们。所以,因为你试图让$scope.users[messages.to].name
围绕那个表达式,就像在javascript中一样(没有$scope
)双重curlies。
{{users[messages.to].name}}