如何从angularjs中的另一个控制器访问一个控制器的值

时间:2013-12-23 08:50:39

标签: angularjs angularjs-scope angularjs-controller

我在angularApp中有两个带有以下代码的控制器

控制器:Devicectr

function Devicectr($scope, $http) {
    $scope.Devices = [{ Id: 1, Devicename: "MasterDeviceA" },
     { Id: 1, Devicename: "MasterDeviceB" },
     { Id: 1, Devicename: "MasterDeviceC" }];
    $scope.ActiveDevice = $scope.Devices[0] // 
};

控制器:PreviewCtr

function Devicectr($scope, $http) {
 $scope.ViewDevice=null;  // Here i want to read the  $scope.ActiveDevice from **Devicectr** Controller

};

我想从 PreviewCtr 控制器中读取 Devicectr 控制器的$ scope.ActiveDevice值。我该怎么做

2 个答案:

答案 0 :(得分:1)

通常在想要在控制器之间共享数据时使用服务。

像:

yourModule.factory('yourService', function() {
    var sharedData = ...

    var getData = function() {
        return sharedData;
    }

    return {
        getData : getData
    }
}

然后在两个控制器中使用它:

function Devicectr($scope, $http, yourService) {...}

function Previewctr($scope, $http, yourService) {...}

您也可以嵌套控制器以包含相同的范围,但我认为这是一个更糟糕的想法。

答案 1 :(得分:0)

创建DeviceService,跟踪当前所选设备。它应该公开setActive(device)getActive()方法。

PreviewCtr注入服务以确定活动设备。您需要注意设备分配或change

如果您将服务分配到范围,如

$scope.deviceService=deviceService;您可以执行类似

的操作
$scope.$watch(function(){ return $scope.deviceService.getActive();},function(newValue,oldValue) {
  //This gets called when the device change
});

您还可以在服务中使用范围$broadcast方法(使用$ rootScope)在设备更改setDevice(device)函数时引发事件。您可以使用$scope.$on处理程序捕获该事件。请参阅文档here