へのハンドオーバattrs.valueは、私はそうのようなディレクティブを定義していますができませんcomponents/_templates/{{vm.type}}.html
は角1.6を使用して指令のtemplateUrl機能
templateUrl
機能で使用するvm.type
の値を引き渡すにはどうすればよいですか?
へのハンドオーバattrs.valueは、私はそうのようなディレクティブを定義していますができませんcomponents/_templates/{{vm.type}}.html
は角1.6を使用して指令のtemplateUrl機能
templateUrl
機能で使用するvm.type
の値を引き渡すにはどうすればよいですか?
属性が補間される前にtemplateUrl
関数が呼び出されているので、それをやろうとしてもできません。これを達成する1つの方法はng-include
を使用することです。
return {
restrict: 'E',
scope: {
type: '@'
},
link: function(scope, element, attrs){
$scope.templateUrl = 'components/_templates/' + attrs.type + '.html';
},
template: '<ng-include src="templateUrl"/>'
};
、コントローラでテンプレートURLを構築するには、テンプレートとしてng-include
を持って構築されたテンプレートURLにSRCを指します。
ここで動的テンプレート持つ方法についての良い記事です:@Chantuへhttps://medium.com/angularjs-meetup-south-london/angular-directives-using-a-dynamic-template-c3fb16d03c6d#.mizywdk6s
おかげで、私は私のために働いている解決策を見つけた:
指令:
angular
.module('myApp')
.directive('lyEntity', lyEntity);
function lyEntity() {
return {
restrict: 'E',
scope: {
model: '=',
type: '='
},
controller: 'lyEntityController',
controllerAs: 'vm',
bindToController: true,
template: '<ng-include src="templateUrl"/>'
};
}
コントローラ:
$scope.templateUrl = 'components/_templates/' + vm.type + '.html';
とそれを呼び出す:
<ly-entity model="vm.entity" type="vm.type"></ly-entity>
私はコントローラで 'attrs'の代わりに' $ attrs'を使用しなければなりません、そうですか?私はちょっと違った答えを出してくれました。あなたの例を使って走らせることができませんでしたが、私は正しい方向に導いてくれました。ありがとうございました! – LBA
ええ、良い点。 'link'を使ってもうまくいくでしょう。 – Chanthu