Angular 5.如何跟踪Javascript文件中的路由变化,或者在组件级别执行功能?
Angular 5. How to track route change in Javascript file, or execute function in component level?
我有 global.js 脚本文件,需要在路由更改为“/home”时启动 InitSwiper() 函数,但无法在脚本文件中找到如何跟踪路由器或通过 [=19 启动函数=]
import { Component, OnInit } from '@angular/core';
declare var global: any;
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
ngOnInit() {
global.initSwiper();
}
}
global.js
$(function () {
"use strict";
$(window).load(function(){
pageCalculations();
$('#loader-wrapper').fadeOut();
$('body').addClass('loaded');
initSwiper();
});
...
})
如果您在构造函数中导入路由器,您实际上可以像这样订阅它:
import { Router, NavigationEnd } from '@angular/router';
constructor(private next: Router) {
next.events.subscribe((route) => {
if (route instanceof NavigationEnd) {
console.log(route.url);
}
});
}
在上面的示例中,它应该打印出当前路线。
您可以创建一个服务,并让您的路由器在它到达所需路由后在 canActivate 中调用它,就像这样。这将让您在组件加载之前处理任何事情
router.module.ts
...
import {myService} from '../services/myService.service'
export const routes: Routes = [
{path: '/home', component: HomeComponent, canActivate:[myService]}
]
...
myService.service.ts
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
@Injectable()
export class myService implements canActivate{
canActivate{
//execute initSwiper here
if(/*success?*/){
return true;
}
else{
//redirect?
}
constructor(
private _router: Router) { }
如果您使用的是 CLI,则需要将该文件包含在 "scripts" 数组内的 .angular-cli.json
文件中。
如果您只想从 home.component.ts
中的那个文件调用一个函数,那么您可以如下声明
declare var global:any;
然后
ngOnInit(){
global.InitSwiper();
}
有些人建议使用守卫,但如果您不需要延迟或阻止路由加载,那就太过分了。
我有 global.js 脚本文件,需要在路由更改为“/home”时启动 InitSwiper() 函数,但无法在脚本文件中找到如何跟踪路由器或通过 [=19 启动函数=]
import { Component, OnInit } from '@angular/core';
declare var global: any;
@Component({
selector: 'app-home',
templateUrl: './home.component.html',
styleUrls: ['./home.component.css']
})
export class HomeComponent implements OnInit {
ngOnInit() {
global.initSwiper();
}
}
global.js
$(function () {
"use strict";
$(window).load(function(){
pageCalculations();
$('#loader-wrapper').fadeOut();
$('body').addClass('loaded');
initSwiper();
});
...
})
如果您在构造函数中导入路由器,您实际上可以像这样订阅它:
import { Router, NavigationEnd } from '@angular/router';
constructor(private next: Router) {
next.events.subscribe((route) => {
if (route instanceof NavigationEnd) {
console.log(route.url);
}
});
}
在上面的示例中,它应该打印出当前路线。
您可以创建一个服务,并让您的路由器在它到达所需路由后在 canActivate 中调用它,就像这样。这将让您在组件加载之前处理任何事情
router.module.ts
...
import {myService} from '../services/myService.service'
export const routes: Routes = [
{path: '/home', component: HomeComponent, canActivate:[myService]}
]
...
myService.service.ts
import { Injectable } from '@angular/core';
import { CanActivate, Router } from '@angular/router';
@Injectable()
export class myService implements canActivate{
canActivate{
//execute initSwiper here
if(/*success?*/){
return true;
}
else{
//redirect?
}
constructor(
private _router: Router) { }
如果您使用的是 CLI,则需要将该文件包含在 "scripts" 数组内的 .angular-cli.json
文件中。
如果您只想从 home.component.ts
中的那个文件调用一个函数,那么您可以如下声明
declare var global:any;
然后
ngOnInit(){
global.InitSwiper();
}
有些人建议使用守卫,但如果您不需要延迟或阻止路由加载,那就太过分了。