2013-03-12 60 views
2

在车把渲染嵌套的对象时,你可以改变目前的范围,因此,如果你有一个对象:变化范围在AngularJS

walrus: { 
    bubbles: 7, 
    zombies[ 
    {name: 'Jim', hobby: 'pinocle'}, 
    {name: 'Cassandra', hobby: 'privateering'}, 
    {name: 'Ke$ha', hobby: 'yelling'} 
    ], 
    address: { 
    city: 'Fresno', 
    state: 'CA' 
    } 
} 

然后我可以发送上下文模板像这样:

<article class='walrus'> 
    <h2>I have {{ bubbles }} bubbles!</h2> 
    <ul> 
    {{#each zombies}} 
     <li>{{ name }} likes {{ hobby }} 
    {{/each }} 
    </ul> 
    <div class='address'> 
    {{#with address}} 
     <p>{{city}}, {{state}}</p> 
    {{/with}} 
    </div> 
</article> 

但棱角分明,如果设置了$ scope.walrus =海象,我结束了这一点:

<article class='walrus'> 
    <h2>I have {{ walrus.bubbles }} bubbles!</h2> 
    <ul> 
     <li ng-repeat="zombie in walrus.zombies">{{ zombie.name }} likes {{ zombie.hobby }} 
    </ul> 
    <div class='address'> 
    <p>{{walrus.address.city}}, {{walrus.address.state}}</p> 
    </div> 
</article> 

是否有WA是否让Angular识别它的范围,并且不需要额外的walrus.,zombie.或(最坏的)walrus.address.

+0

你的意思是你想使用不同范围的相同模板吗?你有什么用例?我的第一个想法是指令或简单地不同的路线,但我不知道这是你在找什么:) – 2013-03-12 22:22:08

+0

我有一个类似于具有嵌套对象的示例对象的对象。如果我想拥有一个海象#表演视图,那么我需要渲染所有这些信息(所以不在另一个路径上),但输入嵌套对象会使我的视图变得混乱!无可否认,这是一种风格的东西,但看看那种不必要的尴尬'.address p'! – Chris 2013-03-12 22:50:06

+0

容易将'clutter'移动到一个指令[plunker demo](http://plnkr.co/edit/3psx921S4AO7w6s2NboZ?p=preview) – charlietfl 2013-03-13 00:16:05

回答

2

有没有办法有角承认它是在什么范围,并且不需要额外的walrus.zombie.,或(最糟糕的)walrus.address.

我不知道有任何方法可以做到这一点。

+0

不幸的是,这似乎是正确的答案。我想我可以明确地创建一个子范围,但这不会更清洁。 – Chris 2013-03-18 16:34:06

0

对于没有嵌套“海象”你可以这样做:

angular.extend($scope, $scope.walrus);

这将海象对象扩大$范围,现在你可以使用{{气泡}}模板!

我使用扩展,但我真的不知道这是否是正确的方式来做你想做的!