2016-07-25 47 views
0

我在AngularJS上遇到了一些问题。 我的控制器,mainCtrl,有这个变量:从ng-repeat ng-style的范围访问变量

this.colors = {Sam:blue,Jane:red,Tom:pink}; 
this.arr = [{person:'Sam',story:'some story'},{name:'Tom',story:'some story2'}] 

而且我得到这个代码:

<div ng-controller="mainCtrl as vm"> 
<ul ng-repeat="obj in arr"> 
<li ng-style={color:vm.color[obj.person]}>{{obj.story}}</li> 
</ul> 
</div> 

我想的是,李会的人在颜色字典中的颜色被染色。我该如何处理?我不确定每次得到的,但是当我这样做,显式地开展工作,例如:

<li ng-style={color:vm.color['Sam']}>{{obj.story}}</li> 
+0

被改编为未定义或OBJ? –

+0

看来,你首先定义this.colors,然后用它作为颜色(没有最后的'') – Yoann

回答

0

它应该看起来像这样。

<div ng-controller="mainCtrl as vm"> 
    <ul> 
     <li ng-repeat="obj in vm.arr track by $index" 
      ng-style="{'color':vm.colors[obj.person]}" 
      ng-bind="obj.story"> 
     </li> 
    </ul> 
</div> 
  1. 请记住,使用您的别名vm(controllerAs)
  2. 使用track byng-repeat获得更好的性能。
  3. 我认为应该ng-repeat已放置在li

她是一个工作jsfiddlehttp://jsfiddle.net/irhabi/nh4ddemr/

+0

仍然无法正常工作..我认为问题是,它不能识别obj.person ,因为如果我用“山姆”替换它的工作正常 – Chenko47

+0

@ Chenko47看看我上面的jsfiddle – krutkowski86

+0

明白了,谢谢兄弟!:) – Chenko47

1

您正在使用controllerAs语法,所以你必须在你的NG-重复使用vm.arr。此外,您应该使用列表项目中的ng-repeat:

<ul> 
    <li ng-repeat="obj in vm.arr" ng-style="{color:vm.color[obj.person]}">{{obj.story}}</li> 
</ul> 
+0

仍然无法工作:( – Chenko47