2015-03-24 3 views
0

У меня есть два контроллера в угловом и имеют переменную в обоих. AddController -> Для того, чтобы сохранить/обновить Controller 2 -> Получить одну запись, основанную на IdКак получить доступ к переменной с другого контроллера в угловом

сценарий:

app.controller('AddController', function ($scope, MyService) { 

$scope.IsNewRecord = 1; //The flag for the new record 
$scope.Save = function() { 
    //Load values in local variable 
    }; 

    //If the flag is 1 then it is new record 
    if ($scope.IsNewRecord === 1) { 
     //Add new data 
     }, 
    } 
    else { 
     //Else Edit the record 
    } 

Singlecontroller: Принеси мне одну запись

app.controller('SingleController', function ($scope, MyService) { 
$scope.search = function (Id) { 
    var promiseGetSingle = MyService.getbyId(Id); 

    promiseGetSingle.then(function (pl) { 
     var res = pl.data; 
     //I ll be using res value in UI to display in text boxes. 

      $scope.IsNewRecord = 0; //If i try to edit and save it back, then 
      //in If-Cluse of above controller should be updated with   /    //IsNewRecord value as 0.. 
    }, 

Как достичь это ... как связаться с другим контроллером, чтобы передать значение моего флага для редактирования.

Если я не ясно, пожалуйста, дайте мне know..i Л.Л. ellobrte

+0

Можете ли вы быть более точными на ролях контроллеров? Сколько у вас страниц? Я думаю (если я хорошо понимаю, что вы здесь делаете), один из ваших контроллеров может быть заменен службой, поэтому вашему контроллеру не нужно будет общаться. – Blackus

ответ

0

Вы можете использовать $rootScope и события для обмена данными между контроллерами. Проверьте Scope the documentation на $on, $broadcast и $emit методов.

//On first controller 
$rootScope.$broadcast('myEventName', {foo: 'bar'}); 

//On second controller 
$rootScope.$on('myEventName', function (params) { 
    params.foo; //bar 
}); 
+0

не должен $ broadCast() должен быть $ broadcast()? –

+0

@ KuganKumar Вы правы, исправлены. Благодаря! – Blackus

+0

для тех, кто собирается следовать этому примеру, имея в виду, во втором контроллере (или любом другом контроллере) не использовать $ rootScope. $ On(), который является вашим приложением. Вместо этого используйте $ scope. $ On(). Зачем? потому что, если ваш второй контроллер будет уничтожен, слушатель событий все равно будет существовать, в следующий раз, когда контроллер будет создан снова, он просто накапливает события. –

0

Вы можете просто воспользоваться услугой, чтобы передать значение с помощью геттеров и сеттеров.

app.service('FlagHandlerService', function() { 
    this.setFlagValue = function(flagValue){ 
     this.flagValue = flagValue; 
    } 
    this.getFlagValue = function(){ 
     return this.flagValue; 
    } 
}); 

Затем вы можете установить значение, когда оно изменяется, и получать его, когда это необходимо. Я не уверен, что это именно то, что вы ищете, но это может указывать на вас в правильном направлении.

+0

Будет ли это работать? Во втором контроллере: – user3436410

+0

Он должен. Вы можете внедрить услугу на столько контроллеров, сколько хотите. Затем вы можете использовать методы getter и setter службы внутри контроллера. – BobDoleForPresident