Roger that. We are getting into more architectural issues now, so considering the notions of 'controllers' and 'services' in Angular, you are really maintaining two types of states:
1. The 'data' state of uploads (how many, what, when, where, etc) which is maintained normally in a 'service' that gets injected into any controller that needs that service. Note, 'services' are normally 'singletons' so they maintain one 'data' state across the app and as they are injected into various client controllers where those controllers have access to the same 'single'ton state. In MVC terms this is somewhat akin to the 'M'odel.
2. The 'visual' state of uploads (DOM manipulation) which as you have already surmised is handled by the controller. In MVC this is akin to the combination of 'V'iew and 'C'ontroller combined. As you advance in AngularJS, there is even a better way to do this where this type of DOM manipulation can be delegated to an AngularJS 'directive' where you can replace your 'li' with your custom own HTML element called '<book>' or something like that that would carry out all the DOM manipulations AND interact with the data service.
If you want to start deploying AngularJS cleanly you should start separating the two states as shown above. As it is right now, you are mingling the two, which of course you can make work, but it will quickly become a problem as your AngularJS app grows.
If you just want to make it work quickly, just move the controller definition up the DOM parent tree to a persistent node, and away from the dynamic <li>, and you will have a persistent controller that can manage both data and visual states for now.
I hope this helps.
Mo