如何在angularjs中从另一个控制器访问一个控制器的值
我在angularApp中有两个控制器,代码如下 控制器:DeviceCtrl如何在angularjs中从另一个控制器访问一个控制器的值,angularjs,angularjs-scope,angularjs-controller,Angularjs,Angularjs Scope,Angularjs Controller,我在angularApp中有两个控制器,代码如下 控制器:DeviceCtrl function Devicectr($scope, $http) { $scope.Devices = [{ Id: 1, Devicename: "MasterDeviceA" }, { Id: 1, Devicename: "MasterDeviceB" }, { Id: 1, Devicename: "MasterDeviceC" }]; $scope.ActiveDevi
function Devicectr($scope, $http) {
$scope.Devices = [{ Id: 1, Devicename: "MasterDeviceA" },
{ Id: 1, Devicename: "MasterDeviceB" },
{ Id: 1, Devicename: "MasterDeviceC" }];
$scope.ActiveDevice = $scope.Devices[0] //
};
function Devicectr($scope, $http) {
$scope.ViewDevice=null; // Here i want to read the $scope.ActiveDevice from **Devicectr** Controller
};
控制器:预览WCTR
function Devicectr($scope, $http) {
$scope.Devices = [{ Id: 1, Devicename: "MasterDeviceA" },
{ Id: 1, Devicename: "MasterDeviceB" },
{ Id: 1, Devicename: "MasterDeviceC" }];
$scope.ActiveDevice = $scope.Devices[0] //
};
function Devicectr($scope, $http) {
$scope.ViewDevice=null; // Here i want to read the $scope.ActiveDevice from **Devicectr** Controller
};
我想从PreviewCtr控制器中读取Devicectr控制器的$scope.ActiveDevice值。如何做到这一点当您希望在控制器之间共享数据时,通常使用服务 比如: 然后在两个控制器中使用此选项:
function Devicectr($scope, $http, yourService) {...}
function Previewctr($scope, $http, yourService) {...}
您也可以嵌套控制器以包含相同的作用域,但我认为这是一个更糟糕的想法。创建一个跟踪当前所选设备的
DeviceService
。它应该公开setActive(设备)
和getActive()
方法
在PreviewCtr
中插入服务以确定活动设备。您需要注意设备分配或更改
如果将服务分配给以下范围:
$scope.deviceService=deviceService代码>您可以执行以下操作
$scope.$watch(function(){ return $scope.deviceService.getActive();},function(newValue,oldValue) {
//This gets called when the device change
});
您还可以在服务中使用scope$broadcast
方法(使用$rootScope)在设备在设置设备(设备)
功能中更改时引发事件。您可以在任何地方使用
处理程序上的$scope.$捕获该事件。请参阅文档。可能重复我尝试了这种方法,但我发现了这个问题,在页面加载时,我在previewCtr中得到了0值。甚至设备控制器也将该值设置到共享服务中。我发现前卢旺达问题国际法庭在deviceCtr之前初始化。我更改了javascript引用的顺序,但它不起作用。但我真的很困惑,我使用的是母版页(ASP.NET)DeviceController在母版页中执行,PreviewController在子版页中执行,它会不会在Javscript的执行顺序中引起任何问题?如果在更改Devicectrl中的值时,您没有在Previewctrl中获得更新的值,我是否理解正确?Pingul,我可以通过任何控制事件(如单击和更改)读取值。我的原因不同我的页面的执行(建议)如下所示。1)设备控制器加载设备并在sharedservice中设置共享数据。然后,previewController会在需要时从sharedservice读取此数据。是,这应该可以工作,但每次更改从服务中重新提取数据时,您都必须通知Previewctr。是!我改变了它的工作方式,但问题是,当第一次加载页面时,在我可以读取Devicectr更改的值之后,它将不工作