2016-07-07 72 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調用以獲取所有電影,並且一旦完成,就會在循環中單獨調用以獲取所有演員的背景。當演員正在加載時,顯示演員字段下的加載符號。 –