2015-12-10 57 views
0

的别名所以,如果我有这样的HTML:变量赋值在AngularJS

<ul> 
    <li ng-repeat="person in course.people"> 

     <div> 
      <span bg-bind="schools[schools.currentSchool][person.id].gradeAverage"></span> 
     </div> 
     <div> 
      <span bg-bind="schools[schools.currentSchool][person.id].bestGrade"></span> 
     </div> 
     <div> 
      <span bg-bind="schools[schools.currentSchool][person.id].worstGrade"></span> 
     </div> 
     <div> 
      <span bg-bind="schools[schools.currentSchool][person.id].numberOfClasses"></span> 
     </div> 
     <div> 
      <span bg-bind="schools[schools.currentSchool][person.id].year"></span> 
     </div> 
     <div> 
      <span bg-bind="schools[schools.currentSchool][person.id].timesFlunked"></span> 
     </div> 

    </li> 
</ul> 

我需要访问schools[schools.currentSchool][person.id]多次,这使得代码看起来很凌乱了一段时间后。有什么方法可以将ng-alias="x=schools[schools.currentSchool][person.id]"之类的东西放在某处吗?所以我可以在需要的地方使用x.gradeAverage。或者其他一些让HTML看起来不那么混乱的方法?

顺便说一句,这个例子的HTML完全是任意的,我只是做了一些事情,但我希望你明白我在问什么。

+4

在你的'ngRepeat' - NG-'现在重复范围内的init =“x = schools [schools.currentSchool] [person.id]”' - 'x“将引用该路径。 – tymeJV

+0

@tymeJV:如果'DOMS [schools.currentSchool] [person.id]'在没有反映到DOM中的范围内发生变化,那么这会使变量static = = if。 –

回答

0

在您的控制器中,您可以为currentSchool设置作用域变量,并以currentSchool[person.id]的身份访问。例如:

//controller 
$scope.currentSchool = $scope.schools[$scope.schools.currentSchool]; 

//HTML 
<li ng-repeat="person in course.people"> 
    <div> 
     <span ng-bind="currentSchool[person.id].gradeAverage"></span> 
    </div> 
    <div> 
     <span ng-bind="currentSchool[person.id].bestGrade"></span> 
    </div> 
    ... 
</li> 

这会缩短一点。另外,是schools.currentSchool === schools[schools.currentSchool]?如果是这种情况,那么你可以缩短更多。无论哪种方式,数据结构似乎有点混乱。

+0

我提供的例子只是我编造的东西,我只是想说明问题:) –

+1

哎呀。在任何情况下,创建对包含'person.id's作为键的对象的引用可能是最短的路线。你也可以创建一个打印出这些信息的指令,然后在你的ngRepeat里有'

'或其他东西。这将清理控制器和标记。 –

1

如果你想输出的所有人物对象的成员,你可以遍历像这样的属性:

<li ng-repeat="person in course.people"> 
    <div ng-repeat="(key,value) in schools[schools.currentSchool][person.id]"> 
    <span ng-bind="value"></span> 
    </div> 
</li> 

Plunker例如:http://plnkr.co/edit/c9psDfNkh5LGR0eVjIHg?p=preview