2014-07-08 92 views
1

我有一个稍微深的JSON对象,我试图在HTML模板中使用。AngularJS分配变量来查看范围

{ 
    "service": { 
     "name": "example", 
     "url": "abc.com", 
     "template": "/abc/def/v1", 
     "metadata": { 
      "password": "dontguessme", 
      "username": "supereasy" 
     } 
    } 
} 

我包括一个带有以下HTML代码的模板。

<div class="modal-body" ng-include="service.instructionsTemplate"> </div> 

在模板中有以下内容。

<h1>Some example content</h1> 
{{service.metadata.password}} 

我的问题是不是通过service.metadata引用字段的密码,是有办法,我可以只用可变密码引用它。

我试图挖掘一些关于作用域和模板的Angular文档,但是空了。我看到你可以使用ng-init。

我能够使用ng-init="metadata = service.metadata",并能够通过metadata.password在模板中引用字段密码。
但是,我只想通过password来引用它。

任何想法?

回答

0

您已经做过ng-init="metadata = service.metadata",为什么不更进一步做ng-init="password = service.metadata.password"

另一种方法是结合$scope.password = service.metadata.password控制器内部thayou're使用页面上


编辑: OP问一个更通用的解决方案

如果你不知道属性名称,那么你最好的办法是绑定元数据对象,就像你已经做的那样,然后遍历它的属性,在你的控制中使用ng-repeat

R:

$scope.metadata = service.metadata 

在你的模板(视图):

<h1>Some example content</h1> 
<ul> 
    <li ng-repeat="element in metadata">{{element}}</li> 
</ul> 
+0

然而,这将工作,元数据下的字段不知道,他们可能是任何变量。我试图想出一个解决方案,可以用于service.metadata下未知的字段名称。 –

+0

如果你不知道他们的名字,你怎么打电话给他们的观点? – domokun

+0

您如何看待这个更一般的解决方案? – domokun

0

您可以轻松地设置密码控制器里面的东西:

app.controller('MainCtrl', function($scope) { 
    $scope.name = 'World'; 

    $scope.data = { 
    "service": { 
     "name": "example", 
     "url": "abc.com", 
     "template": "/abc/def/v1", 
     "metadata": { 
      "password": "dontguessme", 
      "username": "supereasy" 
     } 
    } 
}; 

$scope.password = $scope.data.service.metadata.password; 

}); 

这里是一个演示:http://plnkr.co/edit/KrKeLIP2ANd0rl5NLywF?p=preview

+0

我试图做到这一点没有硬编码service.metadata对象中的字段。我做了一些更多的挖掘,从我看到它看起来不太可能...... –

+0

你是不是指硬编码领域意味着什么?这是不是很明显你在问什么。也许你想要'$ scope'之类的东西。密码= getPassword(数据)'? – lucuma