2016-07-21 12 views
0

Ich versuche, meine Direktive laden in einer Vorlage basierend auf seiner Controller-Variable. Die anderen Fragen, die ich hier gesehen habe, beruhen darauf, dass ein String in die Direktive übertragen wird, anstatt ihn vom Controller zu holen.Richtlinie Vorlage von Controller

Richtlinie:

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; 
    } 
} 

Controller:

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

Vorlage:

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



Der Fehler, den ich ke ep Sehen ist:

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

Wie kann ich es zwingen, die Sprachparameter als Steuerungsvariable zu bewerten und nicht als Zeichenkette?

+1

Versuchen ... Sie brauchen nicht die '{{}} 'geschweifte Klammern –

+0

Kann' ng-include' verwenden – charlietfl

+0

Ich denke @charlieftl ist richtig - ng-include ist der Weg zu gehen. Ich habe meine Antwort aktualisiert. –

Antwort

0

Versuchen

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

... Sie brauchen nicht die {{}} geschweiften Klammern

hier ein plnkr ist mit Winkel 1.4: http://plnkr.co/edit/HOjKKm

Und hier ist die Richtlinie Funktion:

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

Verwenden Sie nicht {{}} auf dem direkten ive definition und verwende auch '=' in deiner Scope-Definition.

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

Ich habe das auch versucht, aber es verwendet immer noch die Zeichenfolge 'lc.selectedLanguage' anstelle von – SirDeimos

+0

Können Sie bestätigen, dass LC ein '$ scope' Objekt ist? –

Verwandte Themen