当我尝试从角度javascript中的另一个控制器调用一个控制器方法时,会发生错误。我觉得那里缺少一些东西。如果有人有完整的方法,请给我答案。
答案 0 :(得分:1)
能够通过不同的控制器共享变量,这是角度中的常见问题。
您的功能可以被视为对象:您需要通过范围分享它的参考。
要执行此操作,您可以:
您可以在控制器中看到注入的单件对象服务:通过控制器共享的公共对象。
您可以使用this精彩指南了解如何使用服务共享范围变量(本指南使用工厂而非服务,但您的需求可以正常使用)。
如果您仍想使用服务,请按this answer。
有时控制器之间有层次结构(因此,范围)。 我们假设你有一种HTML格式:
<div ng-controller="parentController">
<!-- some content here...-->
<div ng-controller="childController">
<!-- some content here...-->
</div>
</div>
这个结构将产生两个不同的范围:一个用于parentController,另一个用于childController。 因此,您的childController范围将能够通过简单地使用$ parent对象来访问parentController范围。例如:
myApp.controller('parentController', function($scope) {
$scope.functionExample = function(){
console.log('hey there');
};
})
myApp.controller('childController', function($scope) {
$scope.functionExample();
});
注意:父对象可以直接在子范围中访问,即使在父级中声明也是如此。
但提防这种方法:你不能真正确定范围层次结构,因此应该始终检查是否定义了变量。
您可以使用rootscope作为共享对象来共享您的。但要注意:这样,当$ rootScope用于其他用途时,您将冒着污染您的$ rootScope变量的风险(参见消息广播)。
无论如何,请参阅this答案以获取示例用例。
通过使用消息,您可以共享对象引用,如下例所示:
myApp.controller('parentController', function($scope, $rootScope) {
var object = { test: 'test'}
$rootScope.$broadcast('message', message)
console.log('broadcasting');
});
myApp.controller('childController', function($scope, $rootScope) {
$scope.$on('message', function(message){
console.log(message);
});
});
最后,我建议您为所有变量使用公共服务,或者尽可能使用范围层次结构方法。
答案 1 :(得分:0)
如果两个控制器嵌套在一个控制器中, 那么你可以通过使用:
简单地调用另一个devices['device_ip'][<index>]
Angular将从当前范围开始搜索$scope.parentMethod();
函数,直到达到parentMethod()