AngularJs如何在其他控制器中使用一个控制器方法,变量

时间:2014-10-30 13:05:50

标签: angularjs

我有两个控制器,如下所示。我想在其他控制器中使用第一个控制器方法/变量

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
 }]);

3 个答案:

答案 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,但使用服务并不易改变。