2016-03-04 91 views
1

我怎麼能防止默認在角2中的路由?在路由器訂閱,我只得到路徑名。我沒有得到它的事件。角2中是否有其他服務提供商獲取路線更改事件?防止默認路由 - 角2

app.component.js

(function (app) { 

app.AppComponent = ng.core 
     .Component({ 
      selector: 'my-app', 
      templateUrl: 'app/views/main.html', 
      directives: [ng.router.ROUTER_DIRECTIVES], 
      viewProviders: [ng.http.HTTP_PROVIDERS] 
     }) 
     .Class({ 
      constructor: [ng.router.Router, ng.http.Http, function (router, http) { 

        this.router.subscribe(function (pathname) { 
         //console.log(pathname); 
        }); 

      }], 
     }); 

ng.router 
     .RouteConfig([ 
      { path: '/login', component: app.LoginComponent, name: 'Login', useAsDefault: true }, 
      { path: '/todos', component: app.TodosComponent, name: 'Todos' }, 
     ])(app.AppComponent); 

})(window.app || (window.app = {})); 

boot.js

(function (app) { 

    document.addEventListener('DOMContentLoaded', function() { 
     ng.platform.browser.bootstrap(app.AppComponent, [ng.router.ROUTER_PROVIDERS, ng.core.provide(ng.router.LocationStrategy, { useClass: ng.router.HashLocationStrategy })]); 
    }); 

})(window.app || (window.app = {})); 
+0

@ThierryTemplier你能幫助解決這個問題嗎? –

+0

這是不是很清楚你想要做什麼。您是否想要阻止具有點擊處理程序的鏈接的默認行爲? – Ludohen

+0

'$ scope。$ on('$ routeChangeStart',function(event,next,current){})'在角度1中,_ $ routeChangeStart_給出了路由變更事件的權利?同樣的事情,我需要在這裏角2.我用路由器訂閱獲取路線變化。但我只有路徑名。 –

回答

0

如果你想使用純JS的CanActivate裝飾,您執行以下操作:

var Child1Component = ng.core.Component({ 
    selector:'test', 
    template: '<div>Test</div>' 
}).Class({ 
    onSubmit: function(){ 
    console.log('onSubmit'); 
    } 
}); 

ng.router.CanActivate((next, prev) => { 
    // The Child1Component component is instantiated 
    return true; 

    // The Child1Component component isn't instantiated 
    // return false; 
})(Child1Component); 

例如,在啓動時,prev參數爲null,並且next一個包含以下內容:

ComponentInstruction { 
    urlPath: "child1", 
    urlParams: Array[0], 
    terminal: true, 
    specificity: "2", 
    params: Object… 
} 
+0

它是100%的工作。我是否需要爲每個子組件添加'CanActivate'?我可以爲** AppComponent **添加'CanActivate',這樣我就可以每次在路由更改時監聽,而無需爲每個子組件添加'CanActivate'? –

+0

太棒了!必須爲每個組件定義'CanActivate',因爲它允許組件被實例化或不被...實例化。 –

+0

好的。一切完成。非常感謝你的幫助。我從你身上學到了很多東西。謝謝 –

0

可以使用@CanActivate()防止路由變化。

另請參閱Angular 2: Inject a dependency into @CanActivate?瞭解當前限制。

+0

你可以給一個** CanActivate **的Javascript代碼樣例嗎? –

+0

目前尚不清楚你的問題是什麼。見上面的評論。鏈接的問題有代碼的答案。你也可以查看https://github.com/angular/angular/issues/4112#issuecomment-153811572 –

+0

我的問題很簡單。我需要在登錄後防止後退按鈕導航。在角度1中,** $ routeChangeStart **在路由更改時給出**事件,接下來的是prev **。同樣的事情,我需要在這裏角2.我該怎麼做? –