Angularjs 如何调查指令中的范围?
我用这个小玩意儿来说明我的问题: 在plunker中,一切按我所希望的方式工作:我设置scope.arr数组,并在链接中对其进行调查。这使我有可能向范围(测试)中添加更多内容,并将其打印出来。使用如下模板: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 因此:在本例中,数组设置在正上方的控制器上。但在我的实际实现中,数组
{{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更清楚地说明了我遇到的问题。