[英]How to pass a function by reference in angular controllers
我正在构建一个有角度的应用程序,在该应用程序中我按照父控制器->子控制器的顺序有两个控制器,仅在父控制器完全执行后才调用子控制器。
我在作用域上使用一个对象,以将属性从父级传递到运行良好的子级控制器。
但是,现在我想以相同的顺序传递函数,但是我无法从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关键字。
您可以只$ 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');
});
您只是缺少function
关键字
function _fetchUpdates() {
...
}
fetchUpdates()实际上返回未定义还是给您“未定义不是函数”错误?
如果是前者,这可能是_fetchUpdates()的问题,而不是您如何传递它。 也许这是一个异步问题? 您可以分享该功能的身体吗?
@Emjay有更正确的答案。 在控制器之间建立如此紧密的依赖关系被认为是不好的做法。 最好使用$ rootScope上传递的消息。
可以仅通过调用一个函数的名称来调用该函数,但是不能将其分配给另一个函数中的引用。 创建对该函数的引用,然后将其传递给子控制器。 像下面这样的东西应该工作
function ParentController($scope) {
...
$scope.fetchUpdates = _fetchUpdates;
function _loadCarrierObject() {
$scope.carrierObject = {};
$scope.carrierObject.foo = bar;
...
$scope.carrierObject.getUpdates = $scope.fetchUpdates;
}
function _fetchUpdates() {
...
}
}
顺便说一句,代码看起来不完整,因此我仅在必要时添加了右花括号。
有关更多信息,请参见此插件 。 在Chrome上按F12键,以在控制台中查看plunkr的输出。
根据您向我们展示的代码,应该可以将函数引用放在作用域上的对象中。
我不会同意那是好的风格。 但是,实际上并没有所谓的“父”和“子”控制器。 如果要在两个控制器之间进行通信,理想的方法是创建共享服务。 如果您确实具有父/子关系,例如“显示用户”指令内部有一个“更新用户按钮”指令,则应使用以require显式声明该关系的指令。
如果这些组件除了共享数据外并没有真正的关系,则可以使用两个指令,在该指令中将同一对象传递给模板中的两个对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.