2016-04-01 7 views
0

Eigentlich ist meine Anforderung, die eckige Fabrikmethode dynamisch zuzuweisen.Wie wird die eckige Fabrikmethode dynamisch zugewiesen?

Bitte schauen Sie diesen Code:

angular.forEach(scope.mapperData.collections.controltype.rowset, function (value, index) { 
    if (value.controltypeid == scope.controlId){ 
     scope.controlData = value.controltypename; 
     controlContent = angular.element(layoutControlsFactory[scope.controlData]()); 
     $compile(controlContent)(scope); 
     element.append(controlContent); 
    } 
}); 

var controlContent = angular.element(layoutControlsFactory[scope.controlData]()); 

In dem obigen Code hat scope.controlData. Der Wert wird dynamisch kommen. Ich brauche die wie

var controlContent = angular.element(layoutControlsFactory[ThirdPartyAutoComplete]()); 

Oder

var controlContent = angular.element(layoutControlsFactory.ThirdPartyAutoComplete()); 

layoutControlsFactory-Code

bosAppModule.factory("layoutControlsFactory",function($compile){ 
    var layoutControlsFactory={}; 

    layoutControlsFactory.ThirdPartyAutoComplete=function(controlId){ 
     console.log("## Create ThirdPartyAutoComplete"); 
     var template='<input kendo-auto-complete>'; 
     return template; 
    }; 


    return layoutControlsFactory; 
}); 

Ich habe versucht zu vergeben, aber es zeigt Fehler.

typeError: layoutControlsFactory[scope.controlData] is not a function

Ich denke, ich habe meine Anforderung gut erklärt. Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Kann mir jemand dabei helfen?

+1

was tut 'layoutControlsFactory' sieht aus wie und was ist der Wert von' scope.controlData'? Wenn sie entsprechende Daten haben, würde Ihre Syntax funktionieren [gut] (https://jsfiddle.net/jyonvcj4/) – Jamiec

+0

@Jamiec - Jetzt habe ich layoutControlsFactory-Code hinzugefügt. Bitte schau. – bagya

Antwort

2

Wenn eckige Klammer-Notation verwenden, muss das Bit in eckigen Klammern eine Zeichenfolge

var controlContent = angular.element(layoutControlsFactory[ThirdPartyAutoComplete]()); 

sollte

var controlContent = angular.element(layoutControlsFactory["ThirdPartyAutoComplete"]()); 

Ein Mockup Beispiel hier zu sehen ist sein werden: https://jsfiddle.net/jyonvcj4/1/

+0

Vielen Dank .. – bagya

Verwandte Themen