2016-07-21 91 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> 



我柯錯誤EP看到的是:

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

我怎樣才能迫使它來評估語言參數作爲控制器變量,而不是作爲一個字符串?

+1

嘗試 <選擇語言NG隱藏= 「認證」 LANGUAGE = 「lc.selectedLanguage」> ......你不需要'{{}} '花括號 –

+0

可以使用'ng-include' – charlietfl

+0

我認爲@charlieftl是正確的 - ng-include是要走的路。我已經更新了我的答案。 –

回答

0

嘗試

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

...你不需要{{}}花括號

下面是一個使用plnkr角1.4: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'對象嗎? –

相關問題