我有两个控制器,如下所示。我想在其他控制器中使用第一个控制器方法/变量
app.controller("createController", ["$scope",
function ($scope)
{
$scope.i = 0;
$scope.changeEstimateStatus = function()
{
console.log('changeEstimateStatus');
};
}]);
app.controller("editController", ["$scope",
function ($scope)
{
//here how can I access 'i' variable of createController
}]);
答案 0 :(得分:3)
使用共享服务:
app.service("mySharedService", [function() {
var _x = null;
return {
setX: function(val) { _x = val },
getX: function() { return _x }
}
}]);
然后注入你的控制器:
app.controller("createController", ["$scope","mySharedService", function($scope, mySharedService) {
$scope.i = mySharedService.getX(); //get
mySharedService.setX(3); //set
}]);
答案 1 :(得分:0)
使用其中一个:
1.您可以使用serveice并将常用功能添加到该服务中,并将该功能访问给所有控制器。
app.service('MyService', function() {
this.changeEstimateStatus = function()
{
console.log('changeEstimateStatus');
};
});
app.controller("createController", ["$scope",MyService,
function ($scope,MyService)
{
$scope.i = 0;
MyService.changeEstimateStatus ();
}]);
app.controller("editController", ["$scope", app.controller("createController", ["$scope",$rootScope,
function ($scope,$rootScope)
{
$scope.i = 0;
MyService.changeEstimateStatus ();
}]);
2.您可以将该函数存储在$ rootscope对象中,然后将该函数访问给所有控制器。
像:
app.controller("createController", ["$scope",$rootScope,
function ($scope,$rootScope)
{
$scope.i = 0;
}]);
app.controller("editController", ["$scope",$rootScope,
function ($scope,$rootScope)
{
$rootScope.changeEstimateStatus ();
}]);
但第二种选择并不是一个好的方法。
答案 2 :(得分:0)
您应该将常用功能(changeEstimateStatus)移动到服务中。两个控制器不依赖于另一个控制器,而是取决于服务。
app.service('estimateService', function() {
this.changeEstimateStatus = function() {
console.log('changeEstimateStatus');
};
});
app.controller("createController", ["$scope","estimateService",
function ($scope, estimateService)
{
$scope.i = 0;
$scope.changeEstimateStatus = function()
{
estimateService.changeEstimateStatus(); //delegate to the service
};
}]);
app.controller("editController", ["$scope", "estimateService"
function ($scope, estimateService)
{
$scope.changeEstimateStatus = function()
{
estimateService.changeEstimateStatus(); //delegate to the service
};
}]);
另一种选择是使用$ rootScope,但使用服务并不易改变。