我在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值。我该怎么做
答案 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。