簡體   English   中英

AngularJs從另一個指令中調用Controller

[英]AngularJs calling Controller from another one in directive

我有一個Controller A ,它負責在<body>顯示數據。 我還有另一個Controller B ,它位於指令中,用於顯示導航。

我想將從Controller B接收的數據(例如字符串數組)傳遞給Controller A ,然后使Controller A調用方法將數據綁定到主體。

到目前為止,我已經找到了一種解決方案:將數據存儲在模塊中的var變量中,然后單擊按鈕進行訪問。

還有其他方法可以使Controller B影響Controller A嗎?

這是我的代碼:

app.controller("Controller A", function($scope, $http){});

app.directive("Navigation", [function(){
return {
  restrict: "E",
  templateUrl: "navigation.html"
};
  }])
.controller("Controller B", function($scope, $http){});

謝謝。

您可以在指令中使用回調函數,只要有一些數據要傳遞,該函數就會由指令的控制器調用:

app.directive("navigation", [function() {
    return {
        restrict: "E",
        cb: '&cb',
        templateUrl: "navigation.html"
    };
}])
.controller("Controller B", function($scope, $http) {
    // Invoke the callback function passed to the directive
    // Of course this call can happen at any time of this
    // directive controller lifecycle
    $scope.cb('some data to pass to the callback function');
});

然后在呈現指令的控制器中定義此回調函數:

app.controller("Controller A", function($scope, $http) {
    $scope.callback = function(someData) {
        alert(someData);
    };
});

呈現指令時將通過:

<div ng-navigation cb="callback"></div>

現在,指令控制器可以將信息傳遞給呈現指令的原始控制器。

如果您需要類似的內容,則對於不相關的范圍,可以使用服務或自定義事件。 幸運的是,Angular使處理自定義事件變得非常容易。

更新了您的小品,以顯示這是可行的。 這里是症結所在:

在您的指令中,您可以執行此操作。 使用$ rootScope可以確保事件到達整個應用程序。

$rootScope.$broadcast('navClick','data send')

然后,在需要收聽的地方執行以下操作:

$scope.$on('navClick', function(ev,data) {console.log(data)})

稀疏使用此技術。 過度使用它會使您難以遵循應用程序中的邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM