Угловой контроллер как переменная часов в родительском контроллере

Как посмотреть переменную, которая привязана к родительскому контроллеру?

function config($stateProvider) {
    $stateProvider
        .state('home', {
            url: '/',
            templateUrl: 'home.html',
            controller: 'HomeController',
            controllerAs: 'vm'
        })

        .state('home.child', {
            url: '/child',
            templateUrl: 'child.html',
            controller: 'ChildController',
            controllerAs: 'vm'
        });
}

function HomeController($scope) {
    this.title = 'Some Title';
}

function ChildController($scope) {
    var vm = this;
    $scope.$watch('vm.title', function(current, original) {
        $log.info('title was %s', original);
        $log.info('title is now %s', current);
    });

}

Функция Watch не распознает изменения родительского заголовка.

Спасибо!:)

2 ответа

Решение

Просто получить доступ к $parent область действия при ссылке на объекты, принадлежащие родителю. Также привыкните к более чистому и более стандартизированному способу структурирования вашего контроллера JS.

HTML

<html ng-app="myApp">
  <body>
    <div ng-controller="HomeController">
      <input type="text" ng-model="title">
      <div ng-controller="ChildController"></div>
    </div>
  </body>
</html>

JS

var app = angular.module("myApp", []);
app.controller("HomeController", ['$scope', '$log', function ($scope, $log) {
  $scope.title = "Some Title";
}]);

app.controller("ChildController", ['$scope', '$log', function ($scope, $log){
  $scope.$watch('$parent.title', function(newValue, oldValue) {
    $log.info('title was %s', oldValue);
    $log.info('title is now %s', newValue);
  });
}]);

Родительский контроллер:

$scope.cancelFlag = false;

Детский Контроллер:

1) $parent.cancelFlag ссылается на родительский контроллер.

2) Если мы сделаем какие-либо изменения в родительском контроллере, watch будет вызван в дочернем контроллере.

Пример:

$scope.cancelFlag = true or false;

3) Здесь мы можем вызвать метод дочернего контроллера, внеся изменения в родительский контроллер.

     $scope.$watch('$parent.cancelFlag', 
     function (newVal, oldVal)
     {
        if (newVal != null && newVal==true)
            $scope.childControllerMethod();
    });
    $scope.childControllerMethod= function () { };
Другие вопросы по тегам