也许ReSharper或visual studio是错误的,但我不认为这会返回一个r值。我也不认为它实际上在$ parent控制器中设置了属性:
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 };
}
}
如果我这样做:
getParentItem($scope.someProperty) = "yadda"
我得到的错误标记可能是ReSharper,我认为它实际上没有设置新值
答案 0 :(得分:0)
正如Amy / Volkan所说,你的代码无效,但我想我得到了你想做的事。有很多ifs,但在这里:
如果你的$scope.someProperty
是你希望在function getParentItem
的结果上重新分配的字符串属性,并且你的函数返回了可以拥有该参数的对象($ scope.someProperty),首先你需要计算你传入的路径,但看起来它是由点分隔的字符串。
// 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";
或您可能需要的其他可能性:
parentItem.param[$scope.someProperty] = "yadda";
然后用parentItem做任何你想做的事情,比如把它放在$ scope或者其他任何东西上。
如果你想要更好的帮助,请做一些jsfiddle或其他什么。
答案 1 :(得分:0)
问题是(并且我对我是多么愚蠢),这个$ scope对象的叶子分支本身不是对象,在某些情况下,在我们的代码中它们甚至还不存在。你已经习惯了作为一个对象的范围,你没有意识到最终的元素至少在Javascript中不可能是对象。
所以解决方案是传递我想要设置为参数的值:
function getParentItem(path, optionalValue)
在父搜索的最后一个循环中,如果传递了optionalValue,我可以将值设置到对象上:
obj[--last parameter name--] = optionalValue;