Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.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
Angularjs 如何调查指令中的范围?_Angularjs_Scope_Directive - Fatal编程技术网

Angularjs 如何调查指令中的范围?

Angularjs 如何调查指令中的范围?,angularjs,scope,directive,Angularjs,Scope,Directive,我用这个小玩意儿来说明我的问题: 在plunker中,一切按我所希望的方式工作:我设置scope.arr数组,并在链接中对其进行调查。这使我有可能向范围(测试)中添加更多内容,并将其打印出来。使用如下模板: {{arr}} - {{test}} The array length is 5 (content of array...) 。。我得到这个结果: [1,2,3,4] - The array length is 4 因此:在本例中,数组设置在正上方的控制器上。但在我的实际实现中,数组

我用这个小玩意儿来说明我的问题:

在plunker中,一切按我所希望的方式工作:我设置scope.arr数组,并在链接中对其进行调查。这使我有可能向范围(测试)中添加更多内容,并将其打印出来。使用如下模板:

{{arr}} - {{test}}
The array length is 5 
(content of array...)
。。我得到这个结果:

[1,2,3,4] - The array length is 4
因此:在本例中,数组设置在正上方的控制器上。但在我的实际实现中,数组是一个json对象,从服务器获取。结果是我不断得到“未定义”作为结果。我认为这可能是因为从指令请求数据到实际交付的(很小的)延迟,同时指令中的链接没有什么可处理的

有什么好主意我可以试试吗

更新:

我做了这个小玩意儿来说明问题:

运行它,然后在结果窗口中,它应该这样说:

{{arr}} - {{test}}
The array length is 5 
(content of array...)
现在,如果进入script.js(或任何其他文件),并在底部添加换行符或其他内容,Plunker将重新加载页面。然后,有时脚本将无法读取数组,并且输出仅为:

(content of array...)
我尝试添加手表,但不确定是否正确。。因为它似乎不起作用

另一件有趣的事情是,通常情况下,这在Plunker上起到了应有的作用。但在本地主机上,这永远不起作用

更新2

我用$watch解决了这个问题。Plunker已更新为正确的解决方案:


如果您不先定义它,您可能会遇到一个未定义的错误,因为arr是在发出调用之后才创建的。您是否尝试创建一个空数组,然后填充它

比如:

angular.module('docsTransclusionExample', [])
.controller('Controller', ['$scope', '$http', function($scope, $http) {
  $scope.arr = [];
  $http.get("somedata.json").success(function(result) {
      $scope.arr = result;
  });
    }]);

希望能有所帮助

有两种方法可以解决这个问题 1) 如果正在使用路由,则应在控制器初始化之前获取数据,如在routeprovider中的resolve函数期间 2) 您应该使用watch来监视更改,并在其中设置属性

  scope.$watch('arr',function(newvalue,oldvalue){
            if(newvalue===oldvalue){return};
            scope.test=newvalue.length
          },true);

我做这件事和你的建议有点不同。请看我第一篇文章的更新。我曾尝试在指令的链接中添加手表,但它似乎对我没有效果。请看我第一篇文章中的更新,有一个新的Plunker更清楚地说明了我遇到的问题。