2017-10-04 8 views
0

Vielleicht ReSharper oder Visual Studio ist falsch, aber ich denke nicht, dass dies einen r-Wert zurückgibt. Ich denke auch nicht, dass es tatsächlich die Eigenschaft in dem $ parent Controller setzt:Warum gibt das keinen L-Wert zurück?

function getParentItem(path) { 
    var obj = $scope.$parent; 
    var param = null; 
    var items = path.split("."); 
    for (var i = 0; i < items.length; i++) { 
     var item = items[i]; 
     var split = item.split("("); 
     if (split.length === 2) { 
      param = split[1].replace(/[\)\']/g, ""); 
     } 
     obj = obj[split[0]]; 
    } 
    if (param == null) { 
     var thisObj = obj; 
     return thisObj; 
    } else { 
     return { obj: obj, param: param }; 
    } 
} 

Wenn ich dies tun:

getParentItem($scope.someProperty) = "yadda" 

ich Fehler wahrscheinlich ReSharper markiert bekommen und ich denke, es funktioniert nicht tatsächlich den neuen Wert

+2

Dieser Code ist nicht gültig. Sie können das Ergebnis eines Funktionsaufrufs nicht zuordnen. – Amy

+1

Hier geht es nicht um Resharper, Sie können keinen String-Wert für eine Funktion festlegen. –

+0

Ihre Funktion scheint nicht einmal etwas "zurückzugeben", das einem l-Wert ähneln könnte (abgesehen davon, dass dies in JS unmöglich ist)? Was erwarten Sie von ihm? – Bergi

Antwort

0

Als Amy/Volkan sagte, dass Ihr Code nicht gültig ist, aber ich denke, ich bekomme, was Sie tun möchten. Es gibt viele ifs aber hier geht es:

wenn Ihr $scope.someProperty String-Eigenschaft ist, die Sie auf Ergebnis der function getParentItem neu zuweisen möchten, und Ihre Funktion zurückgibt einwenden, dass diese param ($ scope.someProperty) haben können, müssen Sie zuerst müssen herausfinden, welchen Pfad Sie übergeben, aber es sieht so aus, als wäre es eine Zeichenfolge, die durch Punkte getrennt ist.

// so then assign result of the function to some variable 
// you need to pass somePath to function 
let parentItem = getParentItem(somePath); 
// then change that property 
parentItem[$scope.someProperty] = "yadda"; 

oder eine andere Möglichkeit, was Sie vielleicht brauchen würde:

parentItem.param[$scope.someProperty] = "yadda"; 

dann tun, was Sie mit parentItem wollen, wie es Spielraum auf $ setzen oder was auch immer.

Wenn Sie bessere Hilfe möchten, bitte etwas Jfiddle oder etwas tun.

0

Das Problem ist (und ich mache mir den Kopf darüber, wie dumm ich war), dass die Blattverzweigungen dieses $ scope-Objekts selbst keine Objekte sind und in einigen Fällen in unserem Code noch nicht existieren. Sie werden so daran gewöhnt, dass $ scope ein Objekt ist, das Sie nicht erkennen, dass die letzten Elemente möglicherweise keine Objekte sein können, zumindest nicht in Javascript.

So ist die Lösung um den Wert zu übergeben war, die ich als Parameter setzen wollten:

function getParentItem(path, optionalValue) 

Auf der letzten Runde der Mutter Suche, wenn optionalValue übergeben wird, kann ich dann den Wert auf die Objekt:

obj[--last parameter name--] = optionalValue; 
Verwandte Themen