2013-12-23 5 views
0

У меня есть два контроллера в angularApp со следующими кодамиКак получить доступ к значению одного контроллера с другого контроллера в angularjs

Контроллер: 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 

}; 

Я хочу прочитать значение $ scope.ActiveDevice значение Devicectr контроллер от PreviewCtr контроллер. Как я могу это сделать

+0

Возможный дубликат [Может ли один контроллер вызвать другой в AngularJS?] (Http://stackoverflow.com/questions/9293423/can-one-controller-call-another-in-angularjs) – Stewie

ответ

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) {...} 

Вы можете также гнездо контроллеры для включают один и тот же объем, но я бы сказал, что это хуже идея.

+0

Я попытался использовать этот подход, но проблема я поймал, что, в то время как загрузка страницы я получил значение 0 в previewCtr. Даже контроллер устройства устанавливает значение в общую службу. я обнаружил, что инициализация previCtr перед deviceCtr. Я изменил порядок ссылки на javascript, но не работал. Но я действительно смутил это, я использую masterpages (ASP.NET), который выполняет DeviceController на главной странице и PreviewController на странице Child, вызывает ли какие-либо проблемы в порядке выполнения javscript –

+0

Правильно ли я понимаю, если вы не получаете обновленное значение в Previewctrl, когда вы меняете значение в Devicectrl? – pingul

+0

Pingul, я могу прочитать значение с помощью любых событий управления, таких как клики и изменения. Моя причина в том, что выполнение моей страницы (предлагаемое) выполняется ниже .1) Устройства контроллера загружают устройства и устанавливают общие данные в sharedservice. то previewController считывает эти данные из sharedservice, когда это необходимо. –

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.

Смежные вопросы