AngularJS 1.5コンポーネントで複数のテンプレートを使用できますか? 1つの属性を持つ1つのコンポーネントがあるので、その属性名に基づいて別のテンプレートをロードしたいと思います。要素の属性名に基づいてテンプレートをロードするにはどうすればよいですか?
jsConfigApp.component('show', {
templateUrl: 'component/show.html', //How to change it based on attribute value?
bindings:{
view:"@"
},
controller: function () {
console.log(this.view)
if (this.view = "user") {
console.log("user")
} else if (this.view = "user") {
console.log("shop")
} else {
console.log("none")
}
}
})
ありがとう。
1.5.xでコンポーネントの動的テンプレートを作成するために2つの方法を使用します。
1)attrプロパティを介して渡す:
templateUrl: function($element, $attrs) {
return $attrs.template;
}
2)サービスをテンプレートに注入し、そこからテンプレートを取得します:
templateURL関数:
templateUrl: function($element, $attrs,TemplateService) {
console.log('get template from service:' + TemplateService.getTemplate());
return TemplateService.getTemplate();
}
GetTemplate関数で、変数に基づいてテンプレートのURLを返します
getTemplate: function(){
if (this.view = "user") {
return "user.html";
} else if (this.view = "user") {
return "shop.html";
} else {
console.log("none")
}
return "shop.html";
}
まず、setメソッドを介して変数「view」をファクトリに渡します。
HTMLテンプレートをさらに変更する必要がある場合は、ディレクティブを使用して、より多くのサポートを備えたコンパイルサービスを使用してください。
テンプレートをパラメーターとしてコンポーネントに渡すのはどうですか?たとえば、次のようにcomponentを作成します。
module.component('testComponent', {
controllerAs: 'vm',
controller: Controller,
bindings: {
template : '@'
},
templateUrl: function($element, $attrs) {
var templates = {
'first' :'components/first-template.html',
'second':'components/second-template.html',
'third' :'components/third-template.html'
}
return templates[$attrs.template];
}
});
そして、以下のようにコンポーネントを使用すると役立つ場合があります
<test-component template='first'></test-component>