2016-07-07 102 views
1

应该指出的是,我对Angular很陌生。如何获得角JS模板中的相关对象?

我有以下的JSON我从Django的REST框架得到:

API /电影/ 1

{ 
     "id": 1, 
     "name": "Mr & Mrs Smith", 
     "actors": [ 
      1, 
      2, 
     ] 
    } 

API /演员/ 1

{ 
     "id": 1, 
     "name": "Angelina Jolie", 
    } 

API /演员/ 2

{ 
     "id": 2, 
     "name": "Brad Pitt", 
    } 

我拍了电影d遵循Angular教程的etail页面,使用$ resource。 这是电影detail.component.js

angular. 
    module('movieDetail'). 
    component('movieDetail', { 
    templateUrl: 'static/partials/movie-detail/movie-detail.template.html', 
    controller: [ '$routeParams', 'Movie', 
     function MovieDetailController($routeParams, Movie) { 
     var self = this; 
      self.movie= Movie.get({movieId: $routeParams.movieId}) 
     } 
    ] 
    }); 

在电影中的HTML模板,我必须通过“$ ctrl.movi​​e.actors”获得了“演员”的ID。但我无法弄清楚是否有办法使用此ID来向服务器请求“actor”对象。类似于: Actor.get({id})将它们合并到影片详情模板中。

TL; DR 我现在可以做什么:

Actors: 
    <ul> 
     <ling-repeat="actor in $ctrl.movie.actors"> {{actor}} </li> 
    </ul> 

结果:

演员

而且我想沿着线的东西:

Actors: 
    <ul> 
     <ling-repeat="actor in $ctrl.movie.actors"> {{actor.name}} </li> 
    </ul> 

结果:

演员

  • 安吉丽娜·朱莉
  • 布拉德·皮特

这个如何实现?

谢谢你的回复!

回答

0

首先您使用Angularjs 2和Angularjs 2的方式不同,然后Angularjs 1. *。

在这种情况下,它更多的JavaScript对象的操作,而Angularjs技巧

你可以试试下面的方法来实现这一

选项1:

,如果你能在Django编辑您的REST调用,改变你的代码返回电影和演员的细节在这样一个js

{ 
    "id": 1, 
    "name": "Mr & Mrs Smith", 
    "actors": [ 
     1: {"id": 1,"name": "Angelina Jolie"}, 
     2: {"id": 1,"name": "Angelina Jolie"}, 
    ] 
} 

并尝试在电影下为演员对象重复ng。或者您可以根据您的要求分开呼叫。

选项2:

你需要在加载的时间做一个懒加载。一旦你的电影对象被加载,你需要调用actor rest url来获得所有需要的actor对象,并且如果你不能进行一次单独的休息调用,就将它们追加到现有的对象中。然后在模板中你可以像上面那样显示actor的详细信息。

+0

关于选项1:我可以在Django中嵌套序列化器来实现类似的JSON输出,但我认为它会使其他通话中的无用信息膨胀。我认为只有在需要时才向服务器询问这些数据会更好。 Option2看起来就像我想要做的一样。你能举出一个如何实现这个目标的例子吗? – Curtwagner1984

+0

另外,据我所知我使用Angular 1.5.7 – Curtwagner1984

+0

我没有发现角1.5。 1.5可能有组件选项。我认为它是我的不好。对于第二个选项的实现,进行一次http调用以获取所有电影,并且一旦完成,就会在循环中单独调用以获取所有演员的背景。当演员正在加载时,显示演员字段下的加载符号。 –