2016-07-12 49 views
1

我看到奧裏利亞網站,文章的人使用run() {}。這種方法通常會做什麼?它是一個生命週期鉤子還是一個新的Javascript 2016方法?javascript/Aurelia中`run(){}`做了什麼?

http://aurelia.io/hub.html#/doc/article/aurelia/framework/latest/cheat-sheet/7

import {Redirect} from 'aurelia-router'; 
 

 
export class App { 
 
    configureRouter(config) { 
 
    config.title = 'Aurelia'; 
 
    config.addPipelineStep('authorize', AuthorizeStep); 
 
    config.map([ 
 
     { route: ['welcome'], name: 'welcome',  moduleId: 'welcome',  nav: true, title:'Welcome' }, 
 
     { route: 'flickr',  name: 'flickr',  moduleId: 'flickr',  nav: true, auth: true }, 
 
     { route: 'child-router', name: 'childRouter', moduleId: 'child-router', nav: true, title:'Child Router' }, 
 
     { route: '', redirect: 'welcome' } 
 
    ]); 
 
    } 
 
} 
 

 
class AuthorizeStep { 
 
    run(navigationInstruction, next) { 
 
    if (navigationInstruction.getAllInstructions().some(i => i.config.auth)) { 
 
     var isLoggedIn = /* insert magic here */false; 
 
     if (!isLoggedIn) { 
 
     return next.cancel(new Redirect('login')); 
 
     } 
 
    } 
 

 
    return next(); 
 
    } 
 
}

+1

[這是一個生命週期方法](http://aurelia.io/hub.html#/doc/api/aurelia/router/latest/class/LoadRouteStep)使用ES2015方法的語法寫入。搜索你鏈接到的網站,你會看到使用'run'方法的各種服務。這在ES2015中並不是什麼新鮮事物。 –

+0

它有!謝謝! –

回答

3

您可以添加多個流水線步驟,你的路由器配置。每個管道必須實現PipelineStep接口:

interface PipelineStep { 
    /** 
    * Execute the pipeline step. The step should invoke next(), next.complete(), 
    * next.cancel(), or next.reject() to allow the pipeline to continue. 
    * 
    * @param instruction The navigation instruction. 
    * @param next The next step in the pipeline. 
    */ 
    run(instruction: NavigationInstruction, next: Next): void; 
} 

source code

正如你可以看到有一定run方法。在稍後的某個時間點,將執行所有步驟的方法run

所以回答你的問題:沒有,它不是ES2015介紹,而是一個約定管道的步驟必須遵循。