2017-03-04 5 views
1

へのハンドオーバattrs.valueは、私はそうのようなディレクティブを定義していますができませんcomponents/_templates/{{vm.type}}.htmlは角1.6を使用して指令のtemplateUrl機能

templateUrl機能で使用するvm.typeの値を引き渡すにはどうすればよいですか?

答えて

1

属性が補間される前に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

+0

私はコントローラで 'attrs'の代わりに' $ attrs'を使用しなければなりません、そうですか?私はちょっと違った答えを出してくれました。あなたの例を使って走らせることができませんでしたが、私は正しい方向に導いてくれました。ありがとうございました! – LBA

+0

ええ、良い点。 'link'を使ってもうまくいくでしょう。 – Chanthu

0

おかげで、私は私のために働いている解決策を見つけた:

指令:

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> 
関連する問題