2017-01-05 4 views
0

У меня есть мое тело, контролируемое MainController. В теле есть еще один вложенный контроллер. В моей index.html, у меня есть div элемент, управляемый контроллером вложенного:Изменить переменную родительского контроллера внутри дочернего контроллера AngularJS 1.x

index.html

<body ng-controller="MainController"> 
    <div ng-controller="LoginController" ng-hide="isLoggedIn"></div> 
    <div class="navbar" ng-hide="!isLoggedIn"> 
    <!-- A form which calls login() function inside LoginController --> 
    </div> 
</body> 

MainController:

angular.module('DemoApp') 
    .controller('MainController', ['$scope', function ($scope) { 
    $scope.isLoggedIn = false; 
}]); 

LoginController

angular.module('DemoApp') 
    .controller('LoginController', ['$scope', '$location', function ($scope, $location) { 
    $scope.login = function() { 
     if($scope.loginCredentials.username === 'username' && $scope.loginCredentials.password === 'password') { 
      $scope.parent.isLoggedIn = true; /* here, how to modify this variable */ 
      $location.path('/home'); 
     } 
    }; 
}]); 

Все, что я хочу сделать, это изменить переменные MainController, то есть isLoggedIn, из моих вложенных контроллеров. Я использовал $scope.parent, но он показывает unknow provider parent. Как достичь этого?

+1

Использовать $ localStorage для хранения isLoggedIn. и получить его из $ localStorage, когда это необходимо. Эти данные доступны до тех пор, пока вы вручную не очистите ключ. –

+0

@SharanDeSilva благодарит, я буду использовать это в будущем. –

ответ

2

Чтобы получить область родительского контроллера, вам необходимо использовать $parent, а затем доступны различные методы и свойства.

$scope.$parent.isLoggedIn = true; 
+0

Спасибо! Кроме того, если я снова зашел на домашнюю страницу, мне нужно установить эту переменную в false. Как это сделать? –

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