angularjs - Two controllers depending on same data returned asynchronously -
there app allows users create or join rooms. there roomslistcontroller displays rooms, roomdetailscontroller shows contents , controls activity inside particular room. , of cause, roomservice provides getrooms() (async) method.
now angular way make 2 controllers wait same data returned roomservice.getrooms()?
details:
- there authentication in app , list of rooms depend on userid. calling
roomservice.getrooms()@ application start not option roomdetailscontrollerdoesn't request list of rooms. whenever room provided via$stateparamsexists , active displayed. if not, there logic guides user room (here list of rooms required) or displays message no rooms available , perhaps it's time create one.- let's assume
getrooms()heavy operation server , it's not desired twice when same data on client can reused. - it's desired have logic doesn't depend 1 controller function executed first, can influenced layout update in template
take @ route resolve promises.
you'll call async method before route resolves:
// in config $routeprovider.when('/your-route', { resolve: { roomdata: function(roomservice) { return roomservice.getrooms(); } } } // roomslistcontroller function(roomdata) { // roomdata } // roomdetailscontroller function(roomdata) { // roomdata } this way, far controllers concerned, data there before route loads.
you've touched on 1 of key issues applications... is, creating single source of truth data composed in way application can consume it.
there many patterns solving this, i'd recommend taking @ route resolution promises starting point, , branching out there. can become complex.
Comments
Post a Comment