2015-12-08 3 views
3

Я следил за примерами настройки nav-bar.html и nav-bar.js в учебнике Aurelia. Позже я хотел добавить некоторую функциональность в VM-nav.js, но обнаружил, что не все свойства или методы когда-либо называются.Aurelia nav-bar VM не работает

Я пытаюсь использовать фильтрацию Aurelia Auth в своей верхней навигации, но даже при отсутствии функциональности auth ничего в top-nav-bar.js никогда не вызывается.

код ниже:

топ-нав-bar.js

import {bindable} from 'aurelia-framework'; 
import {inject} from 'aurelia-framework'; 
import {AuthService} from 'aurelia-auth'; 
//import {AuthFilterValueConverter} from './authFilter'; 
//import {Router} from 'aurelia-router'; 
@inject(AuthService) 
export class TopNavBar { 
    _isAuthenticated=false; 
    @bindable router = null; 

    constructor(auth){ 
    console.log('called nav bar constructor'); //NEVER CALLED 
    this.auth = auth; 

    } 
    //@computedFrom(this.auth) 
    get isAuthenticated(){ 
    return this.auth.isAuthenticated(); //NEVER CALLED 
    } 
} 

топ-нав-bar.html

<template> 
    <nav class="navbar navbar-default navbar-fixed-top" role="navigation"> 
    <!-- <require from="paulvanbladel/aurelia-auth"></require> --> 
    <div class="navbar-header"> 
     <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> 
     <span class="sr-only">Toggle Navigation</span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     <span class="icon-bar"></span> 
     </button> 
     <a class="navbar-brand" href="#"> 
     <i class="fa fa-home"></i> 
     <span>${router.title}</span> 
     </a> 
    </div> 

    <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> 
     <ul class="nav navbar-nav"> 
     <li repeat.for="row of router.navigation | authFilter: isAuthenticated" class="${row.isActive ? 'active' : ''}"> 
      <a data-toggle="collapse" data-target="#bs-example-navbar-collapse-1.in" href.bind="row.href">${row.title}</a> 
     </li> 
     </ul> 

     <ul if.bind="!isAuthenticated" class="nav navbar-nav navbar-right"> 
     <li><a href="/#/login">Login</a></li> 
     </ul> 
     <ul if.bind="isAuthenticated" class="nav navbar-nav navbar-right"> 
     <li><a href="/#/profile">Profile</a></li> 
     <li><a href="/#/logout">Logout</a></li> 
     </ul> 

     <ul class="nav navbar-nav navbar-right"> 
     <li class="loader" if.bind="router.isNavigating"> 
      <i class="fa fa-spinner fa-spin fa-2x"></i> 
     </li> 
     </ul> 
    </div> 
    </nav> 
</template> 

app.html

<template> 
    <require from="./top-nav-bar.html"></require> 
    <require from="bootstrap/css/bootstrap.css"></require> 

    <top-nav-bar router.bind="router"></top-nav-bar> 

    <div class="page-host"> 
    <router-view></router-view> 
    </div> 
</template> 

ответ

7

Если у вас есть aurelia VM с js и html, вам нужно импортировать его в t он посмотреть, как (без * .html):

<require from="./top-nav-bar"></require> 

Иногда у вас нет VM для зрения, в том случае, если вы импортировать только HTML, как вы делаете:

<require from="./top-nav-bar.html"></require> 
+1

Теперь это тонкий различие. Я часами пытался выяснить, где я ошибся. Большое спасибо за ваш ответ. –

+0

То же самое здесь, было бы неплохо обновить документы, чтобы сделать это различие более четким – dan