因此,在angularjs中,您可以定义指令并将html模板绑定到现有的控制器。原则上,这意味着您可以将控制器重用于多个指令,因此可以用于多个模板。
angular
.module('App')
.component('Name', {
templateUrl: 'some.html',
controller: 'someController'
});
如何在Angular中执行此操作。据我所知,它在Angular Components中是指令,并且总是直接绑定html。基本上我想使用另一个只改变html但保持相同功能的视图。
编辑:
基本上我想要这个:
@Component({
selector: 'jhi-exercise-list',
templateUrl: '(MULTIPLE HTML TEMPLATE PATHS HERE)',
providers: [
]
})
export class className{
//USING THE SAME COMPONENT CODE FOR THE MULTIPLE TEMPLATES
constructor(){}
}
我到目前为止找到的唯一选择是通过扩展,但我认为这有点过分。
答案 0 :(得分:0)
templateUrl
定义为函数您可以将templateUrl
指定为表示网址的字符串,或指定为函数,其中包含两个参数tElement
和tAttrs
。
该函数采用以下参数:
tElement
- template element - 声明指令的元素。
tAttrs
- 模板属性 - 在此元素上声明的规范化属性列表。
有关详细信息,请参阅AngularJS Comprehensive Directive API Reference - templateURL
答案 1 :(得分:0)
经过更多研究后,似乎我能想出的最好的解决方案是使用继承。
https://coryrylan.com/blog/angular-component-inheritance-and-template-swapping
他有一个相当不错的描述
感谢所有帮助我的人;)
答案 2 :(得分:-1)
在angularjs中必须有一些指令作为ng-if或类似的东西。
在Angular 4中,您可以按照
的方式执行此操作<div *ngIf="x === 1"></div>
<div *ngIf="x === 2"></div>
你可以根据需要传递x的值。
添加了解决方案
import { Component, Input } from '@angular/core';
import { Blogger } from '../models/blogger';
import { BloggerProfileService } from '../service/blogger-profile.service';
import { SharedService } from '../service/shared.service';
import { AuthService } from '../auth-service.service';
import { Router } from '@angular/router';
@Component({
selector: 'article-author-panel',
templateUrl: './article-author-panel.component.html',
styleUrls: ['./article-author-panel.component.css']
})
export class ArticleAuthorPanelComponent {
@Input('templateType') templateType;
author;
blogger : Blogger;
articleDt;
user;
@Input()
get articleDate(){
return this.articleDt;
}
set articleDate(date){
this.articleDt = this.sharedService.getUTCDate(new Date(date));
}
@Input()
set articleAuthor(author) {
this.author = author;
this.bloggerProfileService.getBlogger(author)
.take(1)
.subscribe((blogger) => {
this.blogger = blogger;
})
}
get articleAuthor() {
return this.author;
}
constructor(
private bloggerProfileService: BloggerProfileService,
private sharedService: SharedService,
private router : Router,
private authService: AuthService
) {
authService.user$
.take(1)
.subscribe((user) => {
if(user) this.user = user;
});
}
clickFollow(){
if(this.user === null || this.user === undefined){
this.router.navigate(['/']);
}
}
}
模板
<ng-container *ngIf="templateType === 1">
<div class="row no-gutters" style="border-top: 1px solid #a0a0a0; padding-top:5px;">
<div class="col-2">
<img src="http://www.publicdomainpictures.net/pictures/170000/velka/spinach-leaves-1461774375kTU.jpg" alt="Person" class="aap-image">
</div>
<div class="col-10">
<div class="row">
<div class="col-9">
<div class="aap-b-detail" *ngIf="blogger">
<span class="aap-b-name">{{ blogger.name }}</span>
<br />
<span class="aap-b-summary">{{ blogger.summary }}</span>
</div>
</div>
<div class="col-3">
<button class="aap-follow" (click)="clickFollow()">Follow</button>
</div>
</div>
</div>
</div>
</ng-container>
<ng-container *ngIf="templateType === 2">
<div class="row no-gutters">
<div class="col-2">
<img src="http://www.publicdomainpictures.net/pictures/170000/velka/spinach-leaves-1461774375kTU.jpg" alt="Person" class="aap-image">
</div>
<div class="col-10">
<div class="row">
<div class="col-9">
<div class="aap-b-detail aap-b-detail-lh" *ngIf="blogger">
<span class="aap-b-name">{{ blogger.name }}</span>
<br />
<span class="aap-b-summary">{{ blogger.summary }}</span>
<br />
<span class="aap-b-date">{{ articleDate }}</span>
</div>
</div>
<div class="col-3">
<button class="aap-follow" (click)="clickFollow()">Follow</button>
</div>
</div>
</div>
</div>
</ng-container>
这是我创建的组件,根据我放置组件布局更改的位置。如果保持后面的代码相同,你可以将它视为两个不同的htmls连接在一起。根据我的要求,我没有使用每个变量。希望这会有所帮助。
答案 3 :(得分:-1)
Name
在这种情况下,我计划在多个地方重用加载组件。我将在特定区域注入此模块,我打算使用加载组件