2017-08-08 3 views
0

Y a-t-il un moyen dans aurelia de rendre dynamiquement différentes vues?Rendu dynamiquement différent dans Aurelia

async Activate(booking) { 
    //booking: is the route param 
    const hasRecord = await this.service.RecordExists(booking); 
    if (hasRecord) { 
      map(booking,form); 
    } 
    return { 
     //Render different template 
    } 

} 

Répondre

2

Vous devriez essayer de résoudre ce problème d'une autre manière. Pourquoi voudriez-vous naviguer vers un ViewModel et déclencher sa création, juste pour ne pas l'utiliser et charger un autre ViewModel? Semble inefficace au mieux non? Aurelia expose des pipelines sur le routeur, vous devriez faire ceci vérifier là et rediriger en conséquence. Regardez l'étape de pré-activer here, vous pourriez écrire quelque chose comme ça (pseudo code):

configureRouter(config, router) { 
    function step() { 
     return step.run; 
    } 
    step.run = async (navigationInstruction, next) => { 
     if(await this.service.RecordExists(navigationInstruction.queryParams...) 
     { 
     return next() 
     } else { 
     next.cancel(new Redirect('your other page')) 
     } 
    }; 
    config.addPreActivateStep(step) 
    config.map([ 
     { route: ['', 'home'],  name: 'home',  moduleId: 'home/index' }, 
     { route: 'users',   name: 'users',  moduleId: 'users/index', nav: true }, 
     { route: 'users/:id/detail', name: 'userDetail', moduleId: 'users/detail' }, 
     { route: 'files/*path',  name: 'files',  moduleId: 'files/index', href:'#files', nav: true } 
    ]); 
    } 

EDIT

Vous pouvez avoir des cas où vous ne voulez pas une redirection, par exemple, vous avez des utilisateurs vouloir signet baseurl/BusinessObject/id, et l'URL est navigatable avant que l'objet existe réellement Ensuite, vous pouvez utiliser la fonction getViewStrategy() sur votre ViewModel:

getViewStrategy(){ 
    if(this.businessObj){ 
     return 'existingObjectView.html';  
    } else { 
     return 'nonExisting.html'; 
    } 
} 
+0

Merci pour répondre, en regardant votre code. semble qu'une redirection est en train de se produire, changeant ainsi l'url qui est exactement ce que je veux éviter next.cancel (new Redirect ('votre autre page')). – crypted

+0

Pouvez-vous expliquer pourquoi vous voulez éviter une redirection? Vous pouvez facilement utiliser 2 vues avec le même viewmodel, fournissez simplement 2 routes pour cela et vous êtes prêt. Vous pouvez résoudre votre problème en utilisant l'élément '' 'compose''', mais cela ajoute de la complexité et je ne vois pas la valeur ajoutée dans votre cas –

+0

car, l'utilisateur devrait pouvoir ajouter cette page à ses favoris, et dans le futur cette page peut être disponible. – crypted