我有一个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();
}
}