Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在angularjs中从另一个控制器访问一个控制器的值_Angularjs_Angularjs Scope_Angularjs Controller - Fatal编程技术网

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

如何在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

我在angularApp中有两个控制器,代码如下

控制器:DeviceCtrl

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更改的值之后,它将不工作