[英]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.