angular - 基于 Url 的调用方法
问题描述
我创建了data.service.ts
一个方法,其中我创建了一个包含有关页面的信息的方法因为我不想为每个页面创建一个单独的组件,因为它在整个页面中具有相同的布局。现在我想展示基于 url 的这些方法并且它正在工作,但我认为这不是任何人帮助的正确方法。这是我的代码
我已经在下面创建了这个代码,它按预期工作,但不知道这是一种正确的方式,或者我可以将它简化为更简单的格式 Dataservice
@Injectable({
providedIn: 'root'
})
export class DataService {
friend(): Observable<FilterCommon[]>{
return new Observable<FilterCommon[]>(observer => {
const refcode: FilterCommon = new FilterCommon();
refcode.name = 'Sutitle here';
refcode.heading = 'The title here';
refcode.action = 'Select this template',
refcode.link = '/templats/friend',
refcode.items = [
{
content:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non tellus eu nulla fringilla fermentum et non ligula. ',
url: 'assets/images/dashboard-gallery/1.jpg',
footer: '',
bottomheading: ''
}
];
const work: FilterCommon = new FilterCommon();
work.headingwork = 'How it works';
work.class = 'bew-ccc';
work.item = [
{
content: '1',
url: 'assets/images/1.png',
bottomheading: 'You install the widget',
footer: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non tellus eu nulla fringilla fermentum et non ligula. '
},
{
content: '2',
url: 'assets/images/2.png',
bottomheading: 'The refer friends',
footer: 'Lorem ipsum dolor sit amet.'
},
{
content: '3',
url: 'assets/images/3.png',
bottomheading: 'Everyone gets coupon rewards ',
footer: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. '
}
];
const friendallpage: FilterCommon[] = [];
friendallpage.push(refcode);
friendallpage.push(work);
observer.next(friendallpage);
observer.complete();
});
}
Giveaway(): Observable<FilterCommon[]>{
return new Observable<FilterCommon[]>(observer => {
const refcode: FilterCommon = new FilterCommon();
refcode.name = 'Subtitle';
refcode.heading = 'The Title';
refcode.action = 'Select this template',
refcode.link = '/templats/giveaway',
refcode.items = [
{
content:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non tellus eu nulla fringilla fermentum et non ligula. ',
url: 'assets/images/dashboard-gallery/1.jpg',
footer: '',
bottomheading: ''
}
];
const work: FilterCommon = new FilterCommon();
work.headingwork = 'How it works';
work.class = 'v-ine';
work.item = [
{
content: '1',
url: 'assets/images/1.png',
bottomheading: 'You install the widget',
footer: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. '
},
{
content: '2',
url: 'assets/images/2.png',
bottomheading: 'The refer friends',
footer: 'this is your moment of glory.'
},
{
content: '3',
url: 'assets/images/3.png',
bottomheading: 'Everyone gets coupon rewards ',
footer: ' if you get lost.'
}
];
const friendallpage: FilterCommon[] = [];
friendallpage.push(refcode);
friendallpage.push(work);
observer.next(friendallpage);
observer.complete();
});
}
leaderboard(): Observable<FilterCommon[]>{
return new Observable<FilterCommon[]>(observer => {
const refcode: FilterCommon = new FilterCommon();
refcode.name = 'Subtitle here';
refcode.heading = 'The Title';
refcode.action = 'Select this template',
refcode.link = '/templats/leaderboard',
refcode.items = [
{
content:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non tellus eu nulla fringilla fermentum et non ligula. ',
url: 'assets/images/dashboard-gallery/1.jpg',
footer: '',
bottomheading: ''
}
];
const work: FilterCommon = new FilterCommon();
work.headingwork = 'How it works';
work.class = 'v-col';
work.item = [
{
content: '1',
url: 'assets/images/1.png',
bottomheading: 'You install the widget',
footer: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. '
},
{
content: '2',
url: 'assets/images/2.png',
bottomheading: 'The friends',
footer: 'this is your moment of glory.'
},
{
content: '3',
url: 'assets/images/3.png',
bottomheading: 'Everyone gets',
footer: 'tif you get lost.'
}
];
const friendallpage: FilterCommon[] = [];
friendallpage.push(refcode);
friendallpage.push(work);
observer.next(friendallpage);
observer.complete();
});
}
}
constructor(private dataService: DataService, private router: Router, private route: ActivatedRoute) {
this.router.events.subscribe((ev) => {
if (ev instanceof NavigationEnd) {
console.log(ev.url);
if(ev.url == '/templates/common/referFriend/getd'){
this.dataService.referfriend().subscribe(data => {
this.data = data;
});
} else if(ev.url == '/templates/modules/Friend'){
this.dataService.friend().subscribe(data => {
this.data = data;
});
} else if(ev.url == '/templates/modules/ecommercepage'){
this.dataService.ecommerce().subscribe(data => {
this.data = data;
});
} else if(ev.url == '/templates/modules/leaderboard'){
this.dataService.leaderboard().subscribe(data => {
this.data = data;
});
} else if(ev.url == '/templates/modules/Giveaway'){
this.dataService.Giveaway().subscribe(data => {
this.data = data;
});
} else if(ev.url == '/templates/modules/Shopify'){
this.dataService.shopify().subscribe(data => {
this.dataRefer = data;
});
} else{
console.log('no url matched');
}
}
});
}
dataRefer: gapshopify[];
data: friend[];
ngOnInit() {}
}
我得到了预期的结果,但需要更正确的方法
解决方案
我意识到您的数据服务中的功能非常相似,它们仅在页脚和链接中有所不同,所以我像这样缩短了您的 dataService:
@Injectable({
providedIn: 'root'
})
export class DataService {
friendFooters=[
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non tellus
eu nulla fringilla fermentum et non ligula. ',
'Lorem ipsum dolor sit amet.',
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. '
]
giveawayFooters=[
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ',
'this is your moment of glory.',
' if you get lost.'
]
leaderboardFooters=[
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ',
'this is your moment of glory.',
'tif you get lost.'
]
getData(url): Observable<FilterCommon[]>{
let selectedFooter=[];
let link='';
switch(url){
case '/templates/modules/Friend':{
selectedFooter=this.friendFooters;
link='/templats/friend';
break
}
case '/templates/modules/Giveaway':{
selectedFooter=this.giveawayFooters;
link='/templats/giveaway';
break
}
case '/templates/modules/leaderboard':{
selectedFooter=this.leaderboardFooters;
link='/templats/leaderboard';
break
}
}
return new Observable<FilterCommon[]>(observer => {
const refcode: FilterCommon = new FilterCommon();
refcode.name = 'Sutitle here';
refcode.heading = 'The title here';
refcode.action = 'Select this template',
refcode.link = link,
refcode.items = [
{
content:
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras non
tellus eu nulla fringilla fermentum et non ligula. ',
url: 'assets/images/dashboard-gallery/1.jpg',
footer: '',
bottomheading: ''
}
];
const work: FilterCommon = new FilterCommon();
work.headingwork = 'How it works';
work.class = 'bew-ccc';
work.item = [
{
content: '1',
url: 'assets/images/1.png',
bottomheading: 'You install the widget',
footer: selectedFooter[0]
},
{
content: '2',
url: 'assets/images/2.png',
bottomheading: 'The refer friends',
footer: selectedFooter[1]
},
{
content: '3',
url: 'assets/images/3.png',
bottomheading: 'Everyone gets coupon rewards ',
footer: selectedFooter[2]
}
];
const datapage: FilterCommon[] = [];
datapage.push(refcode);
datapage.push(work);
observer.next(datapage);
observer.complete();
});
}
并且我已将您的 ts 代码更改为:
constructor(private dataService: DataService, private router: Router, private
route: ActivatedRoute) {
this.router.events.subscribe((ev) => {
if (ev instanceof NavigationEnd) {
console.log(ev.url);
this.dataService.getData(ev.url).subscribe(data => {
this.data = data;
});
}
});
}
dataRefer: gapshopify[];
data: friend[];
ngOnInit() {}
}
但这仅适用于您在 dataservice 中使用的 3 个功能,因此您应该自己完成 switch case。
推荐阅读
- python - 在 Python 中使用套接字在计算机之间进行聊天
- python - 如何使用 python 抓取网络活动和响应?
- r - 我无法立即看到直方图中的线条
- python - 如何在 Python 中实现可以解决奇数/偶数/素数数独难题的约束满足问题?
- java - Android java:如何创建 POJO 并将其转换为 Cloud Firestore REST API 可接受的 JSON
- c# - 管道缓冲区保留直到处理完成
- python - Python 检查两个列表
- .net - 在 .Net Core 中检测 Windows 代理设置
- symfony - 通过 phpspreadsheet 从 Excel 文件导入数据并检查数据库 symfony 4 中是否存在记录
- python-3.x - 如何计算连续字符?