I'm not familiar with vue.js, but there are a couple of options I can think of. API polling, which is probably not preferred, or creating a websocket to octoprint. You might be able to include the octoprint js client in your page and then use the standard callbacks that are available to plugin's now.
Flask is only injecting properties into jinja files which wouldn't be a great problem.
So i can't easily divide the javascript and html into 2 files.
Oh and i have to rebuild my component as plain vue components. actually they are made to work with nuxt. But implemented in vuejs2 and not really in a great way