11import Navigator from './components/Navigator'
22
33export default function install ( Vue , { routes} ) {
4+ let appRoot ;
5+ const start = Vue . prototype . $start
6+ Vue . prototype . $start = function ( ) {
7+ appRoot = this
8+ start . call ( this )
9+ }
410 Vue . component ( 'Navigator' , Navigator )
511
612 Object . keys ( routes ) . map ( path => {
@@ -20,24 +26,29 @@ export default function install(Vue, {routes}) {
2026 data : {
2127 path : false ,
2228 paths : { } ,
23- defaultPath : '/'
29+ defaultPaths : { } ,
2430 } ,
2531 computed : {
2632 route ( ) {
27- return routes [ this . path || this . defaultPath ]
33+ return this . routes ( 'navigator' )
34+ } ,
35+ routes ( ) {
36+ return id => routes [ this . paths [ id ] || this . defaultPaths [ id ] ]
2837 } ,
2938 } ,
3039 methods : {
31- _resolveComponent ( defaultPath ) {
32- if ( defaultPath ) this . defaultPath = defaultPath
40+ _resolveComponent ( defaultPath , id ) {
41+ if ( defaultPath ) {
42+ this . $set ( this . defaultPaths , id , defaultPath )
43+ }
3344
34- if ( this . route ) {
35- return this . route . component
45+ if ( this . routes ( id ) ) {
46+ return this . routes ( id ) . component
3647 }
3748 return false
3849 } ,
3950 _updatePath ( path , id = 'navigator' ) {
40- if ( id === 'navigator' ) {
51+ if ( id === 'navigator' ) {
4152 this . path = path
4253 }
4354 this . $set ( this . paths , id , path )
@@ -48,17 +59,18 @@ export default function install(Vue, {routes}) {
4859
4960 if ( ! matchedRoute ) {
5061 if ( TNS_ENV === 'development' ) {
51- throw new Error ( `Navigating to a route that does not exist: ${ to } ` )
62+ throw new Error ( `[Navigator] Navigating to a route that does not exist: ${ to } ` )
5263 }
5364 return false
5465 }
5566
56- options = Object . assign ( { frame : 'navigator' } , options )
67+ options = Object . assign ( { frame : 'navigator' } , options )
5768
5869 return this . $navigateTo ( matchedRoute . component , options )
70+ . catch ( err => console . log ( `[Navigator] Failed to navigate: ${ err } ` ) )
5971 } ,
6072 back ( options , ...args ) {
61- options = Object . assign ( { frame : 'navigator' } , options )
73+ options = Object . assign ( { frame : 'navigator' } , options )
6274 return this . $navigateBack . call ( this , options , ...args )
6375 }
6476 } ,
0 commit comments