我有一个ParentController和ChildController,它们看起来像这样:

ParentController

app.controller("ParentController", function($scope) {

    // define preload method, expose to template
    $scope.preload = function() {
        console.log("parent");
    };

    // call preload function
    $scope.preload();
});


ChildController

app.controller("ChildController", function($scope) {
    $controller("ParentController", {
        $scope: $scope,
    });

    // override preload method here
    $scope.preload = function() {
        console.log("child")
    };
});


如您所见,两个Controller都定义了$scope.preload(),该实例在ParentController中实例化时调用。我的目标是让ChildController覆盖此方法,以便在调用该方法时,它将另一个字符串记录到控制台。

这可能吗?如果没有,我该如何在我的ParentController中重用ChildController中定义的所有方法?

最佳答案

要在独立控制器之间共享数据,可以使用服务。使用需要共享的数据模型创建服务。在相应的控制器中注入服务。

在以下示例中,Service用于存储变量x。独立控制器将在需要时检查X的值。

angular.module('myApp', [])
    .service('myService', function () {
        var x=5 ;
        return {
            increase : function() {
                x++;
            },
            getX : function() {
                return x;
            }
       };
    })

function ControllerA($scope, myService) {
    $scope.x = 1;
    $scope.incrementDataInService= function() {
        myService.increase();
    }
    $scope.syncDataWithService= function() {
        $scope.x = myService.getX();
    }
}

function ControllerB($scope, myService) {
   $scope.x = 1;
    $scope.incrementDataInService= function() {
        myService.increase();
    }
    $scope.syncDataWithService= function() {
        $scope.x = myService.getX();
    }
}​

07-24 20:56