2016-08-08 10 views
2

ディレクティブを使用してページのテンプレートをパラメータ化しようとしました。 私は 'タイプ'値を持つオブジェクトの配列を持っています。タイプが異なる場合、私は異なるテンプレートを使いたいです。ここで2ウェイデータバインディングを使用したAngularJSディレクティブのtemplateUrl関数

は、私が試したものです:

directive.js

angular.module('core') 
    .directive('mySolutionDisplay', function() { 
    return { 
     restrict: 'E', 
     scope: { 
     solution: '=' 
     }, 
     templateUrl: function (elem, attr) { 
     return 'path/to/template/solution-'+attr.type+'.template.html'; 
     } 
    }; 
    }); 

view.html

<div class="row"> 
    <my-solution-display type="vm.solution[0].type" solution="vm.solution"></my-solution-display> 
</div> 

私は次のエラーを取得する: angular.js:11706 Error: [$compile:tpload] Failed to load template: path/to/template/solution-vm.solution[0].type.template.html

type="vm.solution[0].type"type="{{vm.solution[0].type}}"に置き換えようとしましたが、エラーメッセージに中括弧が追加されました。

+0

+0

に変更された方法に注意してくださいあなたはそのようにしようとしたことがあり

<my-solution-display type="{{vm.solution[0].type}}" solution="vm.solution"> </my-solution-display>

を使用し、私はそれが変数名を解決していません「」=タイプで考えますそこに中括弧を追加しようとすることができます –

答えて

0

属性(attrs)には、スコープ変数へのアクセス権がありません。それらは、補間された後にDOM値を得る。だから、

type="vm.solution[0].type"type="{{vm.solution[0].type}}"

+0

私はすでにこれを試しましたが、単にエラーの説明に中括弧を追加します。 'angular.js:11706エラー:[$ compile:tpload]テンプレートをロードできませんでした:path/to/template/solution - {{vm.solution [0] .type}} template.html' – JulienM

+1

ええ、無視してください回答。それはちょうど不可能であるように見えます。バグ:https://github.com/angular/angular.js/issues/13526を参照してください。 この問題を解決する別の方法については、http://stackoverflow.com/questions/21835471/angular-js-directive-dynamic-templateurlをご覧ください。 – Chanthu

関連する問題