我正在构建一个角度应用程序,我按顺序有两个控制器 父控制器 - >子控制器,只有在父控制器完全执行时才调用子控制器。
我正在使用范围内的对象将属性从Parent传递给Child控制器,该控制器工作正常。
但是,现在我想以相同的顺序传递一个函数,但是我无法从子控制器访问它。
parentController.js
function ParentController($scope) {
...
function _loadCarrierObject() {
$scope.carrierObject = {};
$scope.carrierObject.foo = bar;
...
$scope.carrierObject.getUpdates = _fetchUpdates;
}
function _fetchUpdates() {
...
}
childController.js
function getUpdates() {
$scope.carrierObject.foo; // returns bar
$scope.carrierObject.getUpdates(); // returns undefined
}
编辑:我应该是明确的。我正在尝试将function关键字与两个函数定义一起使用。
答案 0 :(得分:2)
您可以使用$ rootScope。$ emit和您的父控制器监听的事件,这可以完成您的功能吗?
示例:
app.controller('ParentCtrl', function ParentCtrl ($scope) {
$scope.$on('child', function (event, data) {
console.log('foo');
});
});
app.controller('ChildCtrl', function ChildCtrl ($scope) {
$scope.$emit('child', 'bar');
});
答案 1 :(得分:0)
您错过了function
关键字
function _fetchUpdates() {
...
}
答案 2 :(得分:0)
fetchUpdates()实际上是返回undefined还是它给你一个'undefined is not a function'错误?
如果是前者,这可能是_fetchUpdates()的问题,而不是你传递它的方式。也许这是一个异步问题?你能分享那个功能的身体吗?
@Emjay有更正确的答案。在控制器之间建立这种紧密依赖性被认为是一种不好的做法。最好在$ rootScope上使用消息传递。
答案 3 :(得分:0)
可以通过调用其名称在另一个函数中调用函数,但不能将其分配给另一个函数中的引用。 创建对函数的引用,然后将其传递给子控制器。像下面的东西应该工作
function ParentController($scope) {
...
$scope.fetchUpdates = _fetchUpdates;
function _loadCarrierObject() {
$scope.carrierObject = {};
$scope.carrierObject.foo = bar;
...
$scope.carrierObject.getUpdates = $scope.fetchUpdates;
}
function _fetchUpdates() {
...
}
}
顺便说一下,代码看起来不完整,所以我只是在必要时添加了大括号。
有关详细信息,请参阅此plunkr。点击Chrome上的F12,在控制台中查看plunkr的输出。
答案 4 :(得分:0)
从您向我们展示的代码中,它应该将函数引用放在范围内的对象中。
我不同意这是好的风格。然而,并没有真正的东西"父母"和孩子"控制器。如果要在两个控制器之间进行通信,理想的方法是创建共享服务。如果您真的有父/子关系,例如"显示用户"指令内部有一个"更新用户按钮"指令,你应该使用明确声明与require的关系的指令。
如果组件除了共享数据之外并不是真正相关的,那么您可以使用两个指令将模板中的同一个对象传递给它们。