2016-07-21 7 views
0

コントローラ変数に基づいてテンプレートにディレクティブをロードしようとしています。私がここで見てきた他の質問は、コントローラからそれを取得するのではなく、命令に渡される文字列に依存しています。コントローラからのディレクティブテンプレート

指令:

import {LanguageController} from "./language.controller.ts"; 

export class LanguageSelectDirective { 
    static NAME: string = "selectLanguage"; 


    static factory(): ng.IDirective { 

     let directive = { 
      restrict: "E", 
      link: function() {}, 
      templateUrl: function(elem, attrs){ 
       return "./" + attrs.language + "/language.html" 
      }, 
      scope: { 
       language: "@" 
      }, 
      controller: LanguageController, 
      controllerAs: "lc", 
      bindToController: true 
     }; 

     return directive; 
    } 
} 

コントローラー:

export class LanguageController{ 
    private selectedLanguage: String; 
    //More stuff 
} 

テンプレート:

<select-language ng-hide="authenticated" language="{{lc.selectedLanguage}}"></select-language> 



私はKEエラーEPのシーイングは次のとおりです。

GET http://localhost:3000/%7B%7Blc.selectedLanguage%7D%7D/language.html 404 (Not Found)

どのように私は、コントローラ変数としての代わりに、文字列リテラルとして言語パラメータを評価することを強制することができますか?

+1

...あなたが必要としない<選択言語NG非表示= "認証済み" 言語= "lc.selectedLanguage"> を試してみてください '{{}} '中括弧 –

+0

' ng-include'を使うことができます – charlietfl

+0

@charlieftlが正しいと思います - ng-includeが行く方法です。私は私の答えを更新しました。 –

答えて

0

<select-language ng-hide="authenticated" language="lc.selectedLanguage"></select-language> 

を試してみてください...あなたがここ{{}}中括弧

を必要としない角度1.4を使用してplnkrです:http://plnkr.co/edit/HOjKKm

そしてここでは、ディレクティブの機能です:

let directive={ 
    return { 
     restrict: 'E', 
     scope: { 
     language: '=', //= not @ ensures the model value is interpreted 
     'content': '=' //we are binding to an object 
     }, 
     template: '<ng-include src="getTemplateUrl()"></ng-include>', 
     controller: function($scope){ 
     $scope.getTemplateUrl=function(){ 
      return $scope.language+'_language.html'; 
     } 
     } 
    } 
} 
0

{{}}を直接使用しないでくださいまた、スコープ定義で '='を使用します。

<select-language ng-hide="authenticated" language="lc.selectedLanguage"></select-language> 
+0

私もこれを試しましたが、評価の代わりに 'lc.selectedLanguage'という文字列を使用しています – SirDeimos

+0

lcが' $ scope'オブジェクトであることを確認できますか? –

関連する問題