簡體   English   中英

從另一個Controller Angular Js調用函數

[英]Call function from another Controller Angular Js

我是新手使用角度js,我已經聲明了許多控制器,現在我想將一個控制器的功能用於另一個控制器。 這是我的示例代碼。

app.controller('Controller1',function($scope,$http,$compile){
    $scope.test1=function($scope)
    {
          alert("test1");
    }
});

app.controller('Controller2',function($scope,$http,$compile){
    $scope.test2=function($scope)
    {
          alert("test1");
    }
});
app.controller('Controller3',function($scope,$http,$compile){
  ///
});

現在我想在controller3中調用test2函數。 任何人都可以幫助..感謝Avance ... :)

您無法從控制器內的控制器調用方法。 您需要提取方法,創建服務並調用它。 這也將使代碼彼此分離並使其更易於測試

(function() {
    angular.module('app', [])
        .service('svc', function() {
            var svc = {};

            svc.method = function() {
                alert(1);
            }

            return svc;
        })
        .controller('ctrl', [
            '$scope', 'svc', function($scope, svc) {
                svc.method();
            }
        ]);
})();

示例: http//plnkr.co/edit/FQnthYpxgxAiIJYa69hu?p = preview

最好的方法是編寫服務並在兩個控制器中使用該服務。 請參閱文檔服務文檔

如果您真的想從另一個控制器訪問控制器方法,請按照以下選項:在范圍上發出事件:

function FirstController($scope) {  $scope.$on('someEvent', function(event, args) {});}

function SecondController($scope) {  $scope.$emit('someEvent', args);}

控制器是一個構造函數,如果例如在指令中使用它將創建一個新實例。

假設您的控制器在同一范圍內,您仍然可以按照自己的意願行事,只需:

請注意,它們必須位於相同的范圍內 ,如果未隔離子范圍,它仍然可以工作。 該指令的定義:

{
    controller: Controller1,
    controllerAs: 'ctrl1',
    link: function($scope) {

        $scope.ctrl1.test1(); // call a method from controller 1
        $scope.ctrl2.test2(); // created by the directive after this definition
        $scope.ctrl3.test3(); // created by the directive after this definition
    }
}

....
{
    controller: Controller2,
    controllerAs: 'ctrl2',
    link: function($scope) {
        $scope.ctrl1.test1(); // created earlier
        $scope.ctrl2.test2(); // ...
        $scope.ctrl3.test3(); // created by the directive after this definition
    }
}

....
{
    controller: Controller3,
    controllerAs: 'ctrl3',
    link: function($scope) {
        $scope.ctrl1.test1();
        $scope.ctrl2.test2();
        $scope.ctrl3.test3();
    }
}

這應該工作。

暫無
暫無

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

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