Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS对象中的变量_Javascript_Angularjs - Fatal编程技术网

Javascript JS对象中的变量

Javascript JS对象中的变量,javascript,angularjs,Javascript,Angularjs,我有一个JSON对象 {scope:{results:{...}}} 我有一个字符串名为 "data.one.url" 现在我想在JSON对象内设置值。通常我会这样做: scope.results.data.one.url = "hello"; 但是当我只有上面提到的字符串时怎么做呢?如果我把它做好了,这个怎么样 var myJSON = {scope:{results:{...}}} myJSON["scope"]["results"]["url"] = data.one.url myJ

我有一个JSON对象

{scope:{results:{...}}}
我有一个字符串名为

"data.one.url"
现在我想在JSON对象内设置值。通常我会这样做:

scope.results.data.one.url = "hello";

但是当我只有上面提到的字符串时怎么做呢?

如果我把它做好了,这个怎么样

var myJSON = {scope:{results:{...}}}
myJSON["scope"]["results"]["url"] = data.one.url
myJSON = JSON.Stringify(myJSON);
然后将此对象作为JSON:
{scope:{results:{url{value}}}

以下是数据结构:

myData = {scope:{results:{data:{one:{url:"The url"}}}}}
定义一个基础。您的字符串访问路径与此相关:

var base = myData.scope.results;
以及通过路径访问的函数:

function getIn(base, path) {
  var components = path.split(".");
  var current = base;
  for (var i = 0; i < components.length; i++) {
    current = current[components[i]];
  }

  return current;
}
或相对于根:

getIn(myData, "scope.results.data.one.url")
>>> "The url"

当然,需要更多的错误处理,以使其对您不期望的路径具有健壮性。

在这种情况下,最简单、最方便的方法是使用$parse服务,因为您使用的是AngularJS:

演示:


Angular在内部使用$parse服务来完成这类工作。在HTML{{someobj.prop.name}中编写时,字符串someobj.prop.name将在$parse服务的帮助下根据$scope进行解释。如果你想的话,你可以自己用,这很酷。只需确保将服务注入控制器。

我不明白JSON对象中的值是什么意思。很抱歉,我是德国人,请尽我最大的努力。我尽力做到clearer@dfsq我使用角度,但我认为它在这里不重要。如果我错了,请更正。是的,这非常重要,因为使用Angular可以在一行代码中解决此问题,因为它已经在$parse服务中提供了字符串解析和上下文解析工具。{scope:{results:{url{value}}}}}}不是有效的JSON。当数据编码为JSON时,密钥必须双引号。这个url{value}也是无效的。谢谢,我误用了这个术语。url{value}仍然无效。在我的代码中,它实际上是一个指令。如何将其注入控制器?对于指令:。指令'myDirective',['$parse',函数$parse{return{link:function{},controller:function{};}]。检查带有注入$parse服务的指令示例:
getIn(myData, "scope.results.data.one.url")
>>> "The url"
var str = 'data.one.url';
var url = $parse('results.' + str)($scope); // "hello"