为什么不返回l值?

时间:2017-10-04 20:04:50

标签: javascript angularjs angularjs-directive

也许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,我认为它实际上没有设置新值

2 个答案:

答案 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;