Angular2:如何在组件内部显示组件标签的内部 HTML?
Angular2: How to show inner HTML of component-tags inside of component?
我有一个关于 angular2 的问题。我正在创建一些组件并想要这样的东西:
这是我的 DogComponent class:
@Component({
selector: "dog",
template: "dog.template.html"
})
class DogComponent
{
@Input() image: string;
}
和dog.template.html中的模板:
<div>
<!-- Content of <top> should go here -->
<img class="after" src="dogs/{{image}}" />
<!-- Content of <bottom> should go here -->
</div>
当我使用 DogComponent 时,它应该使用传递的 src 创建 img-tag,还可以查看图像前后的其他 HTML 部分。
所以最后,如果我写这段代码:
<dog image="garry.png">
<top>
<h1>This is Garry!</h1>
</top>
<bottom>
<span>He is my favorite dog!</span>
</bottom>
</dog>
应该渲染成这样:
<dog>
<div>
<h1>This is Garry!</h1>
<img src="dog.png" />
<span>He is my favorite dog!</span>
</div>
</dog>
有人知道我的问题的答案吗?
那就太好了!
编辑:
感谢您的建议,所以现在我更新了我的代码片段并添加了 DogListComponent
。如果我在我的应用程序中的某处使用标记 dog-list
,则应该查看最后一个片段(浏览器结果)。希望现在更清楚了。
dog.component.ts
@Component({
selector: "dog",
templateUrl: "dog.template.html"
})
class DogComponent
{
@Input() image: string;
}
dog.template.html
<div>
<!-- Content of <top> should go here -->
<img class="after" src="dogs/{{image}}" />
<!-- Content of <bottom> should go here -->
</div>
dog_list.component.ts
@Component({
selector: "dog-list",
templateUrl: "dog-list.template.html"
})
class DogListComponent
{
}
狗-list.template.html
<dog image="garry.png">
<top>
<h1>This is Garry!</h1>
</top>
<bottom>
<span>He is my favorite dog!</span>
</bottom>
</dog>
<dog image="linda.png">
<top>
<h1>My little Linda :)</h1>
</top>
<bottom>
<span>She is my cutest dog!</span>
</bottom>
</dog>
<dog image="rex.png">
<top>
<h1>And here is Rex!</h1>
</top>
<bottom>
<span>DANGEROUS!</span>
</bottom>
</dog>
浏览器结果:
<dog-list>
<dog image="garry.png">
<top>
<h1>This is Garry!</h1>
</top>
<bottom>
<span>He is my favorite dog!</span>
</bottom>
</dog>
<dog image="linda.png">
<top>
<h1>My little Linda :)</h1>
</top>
<bottom>
<span>She is my cutest dog!</span>
</bottom>
</dog>
<dog image="rex.png">
<top>
<h1>And here is Rex!</h1>
</top>
<bottom>
<span>DANGEROUS!</span>
</bottom>
</dog>
<dog-list>
看来您误解了选择器的作用。选择器 <dog></dog>
将被其他组件(例如 AppComponent)用来显示您的狗组件 HTML。所以,在自己的组件中使用选择器是没有意义的 HTML.
另外,如果你想使用外部文件作为模板,语法是templateUrl
而不是template
。所以:
@Component({
selector: "dog",
templateUrl: "dog.template.html" // make sure the path to the file is correct
在您的 dog.template.html
中,只需输入您的 HTML 代码:
<div>
<h1>This is Garry!</h1>
<img src="dogs/{{image}}" />
<!-- the component deliver the value image (dog.png) to your template -->
<span>He is my favorite dog!</span>
</div>
编辑 以响应您更新的代码。
如果我理解得很好,您可以从 dog_list.component.ts
访问一组狗 pictures
。
您可以在模板中使用它们,例如 *ngFor="let picture of pictures"
。你没有说你的数据是什么样子,但如果你有一个格式类似于 arr = [{'topTile':'This is Garry!', 'picture': 'garry.png', 'bottomTitle':'He is my favorite dog!' }, {}, ...]
的数组,也许你可以试试这个
<!-- Parent component template (dog_list) -->
<div *ngFor="let data of arr">
<top>
<h1>{{ data.topTitle }}</h1> <!-- This is Garry!, ... -->
</top>
<dog [image]="data.picture"></dog><!-- Bind data to children component dog with value garry.png -->
<bottom>
<span>{{ data.bottomTitle }}</span> <!-- He is my favorite dog!,... -->
</bottom>
</div>
有关更多详细信息,angular 模板语法文档可能会有所帮助:
https://angular.io/docs/ts/latest/guide/template-syntax.html
所以我找到了我的解决方案!我需要使用 <ng-content>
.
dog.template.html 看起来像这样:
<div>
<ng-content select="top"></ng-content>
<img class="after" src="dogs/{{image}}" />
<ng-content select="bottom"></ng-content>
</div>
然后它将在我的 div.
中插入指定的 <top>-tags
和 <bottom>-tags
我有一个关于 angular2 的问题。我正在创建一些组件并想要这样的东西:
这是我的 DogComponent class:
@Component({
selector: "dog",
template: "dog.template.html"
})
class DogComponent
{
@Input() image: string;
}
和dog.template.html中的模板:
<div>
<!-- Content of <top> should go here -->
<img class="after" src="dogs/{{image}}" />
<!-- Content of <bottom> should go here -->
</div>
当我使用 DogComponent 时,它应该使用传递的 src 创建 img-tag,还可以查看图像前后的其他 HTML 部分。
所以最后,如果我写这段代码:
<dog image="garry.png">
<top>
<h1>This is Garry!</h1>
</top>
<bottom>
<span>He is my favorite dog!</span>
</bottom>
</dog>
应该渲染成这样:
<dog>
<div>
<h1>This is Garry!</h1>
<img src="dog.png" />
<span>He is my favorite dog!</span>
</div>
</dog>
有人知道我的问题的答案吗?
那就太好了!
编辑:
感谢您的建议,所以现在我更新了我的代码片段并添加了 DogListComponent
。如果我在我的应用程序中的某处使用标记 dog-list
,则应该查看最后一个片段(浏览器结果)。希望现在更清楚了。
dog.component.ts
@Component({
selector: "dog",
templateUrl: "dog.template.html"
})
class DogComponent
{
@Input() image: string;
}
dog.template.html
<div>
<!-- Content of <top> should go here -->
<img class="after" src="dogs/{{image}}" />
<!-- Content of <bottom> should go here -->
</div>
dog_list.component.ts
@Component({
selector: "dog-list",
templateUrl: "dog-list.template.html"
})
class DogListComponent
{
}
狗-list.template.html
<dog image="garry.png">
<top>
<h1>This is Garry!</h1>
</top>
<bottom>
<span>He is my favorite dog!</span>
</bottom>
</dog>
<dog image="linda.png">
<top>
<h1>My little Linda :)</h1>
</top>
<bottom>
<span>She is my cutest dog!</span>
</bottom>
</dog>
<dog image="rex.png">
<top>
<h1>And here is Rex!</h1>
</top>
<bottom>
<span>DANGEROUS!</span>
</bottom>
</dog>
浏览器结果:
<dog-list>
<dog image="garry.png">
<top>
<h1>This is Garry!</h1>
</top>
<bottom>
<span>He is my favorite dog!</span>
</bottom>
</dog>
<dog image="linda.png">
<top>
<h1>My little Linda :)</h1>
</top>
<bottom>
<span>She is my cutest dog!</span>
</bottom>
</dog>
<dog image="rex.png">
<top>
<h1>And here is Rex!</h1>
</top>
<bottom>
<span>DANGEROUS!</span>
</bottom>
</dog>
<dog-list>
看来您误解了选择器的作用。选择器 <dog></dog>
将被其他组件(例如 AppComponent)用来显示您的狗组件 HTML。所以,在自己的组件中使用选择器是没有意义的 HTML.
另外,如果你想使用外部文件作为模板,语法是templateUrl
而不是template
。所以:
@Component({
selector: "dog",
templateUrl: "dog.template.html" // make sure the path to the file is correct
在您的 dog.template.html
中,只需输入您的 HTML 代码:
<div>
<h1>This is Garry!</h1>
<img src="dogs/{{image}}" />
<!-- the component deliver the value image (dog.png) to your template -->
<span>He is my favorite dog!</span>
</div>
编辑 以响应您更新的代码。
如果我理解得很好,您可以从 dog_list.component.ts
访问一组狗 pictures
。
您可以在模板中使用它们,例如 *ngFor="let picture of pictures"
。你没有说你的数据是什么样子,但如果你有一个格式类似于 arr = [{'topTile':'This is Garry!', 'picture': 'garry.png', 'bottomTitle':'He is my favorite dog!' }, {}, ...]
<!-- Parent component template (dog_list) -->
<div *ngFor="let data of arr">
<top>
<h1>{{ data.topTitle }}</h1> <!-- This is Garry!, ... -->
</top>
<dog [image]="data.picture"></dog><!-- Bind data to children component dog with value garry.png -->
<bottom>
<span>{{ data.bottomTitle }}</span> <!-- He is my favorite dog!,... -->
</bottom>
</div>
有关更多详细信息,angular 模板语法文档可能会有所帮助: https://angular.io/docs/ts/latest/guide/template-syntax.html
所以我找到了我的解决方案!我需要使用 <ng-content>
.
dog.template.html 看起来像这样:
<div>
<ng-content select="top"></ng-content>
<img class="after" src="dogs/{{image}}" />
<ng-content select="bottom"></ng-content>
</div>
然后它将在我的 div.
中插入指定的<top>-tags
和 <bottom>-tags