Задать вопрос
sniffer
@sniffer
front-end developer

Как правильно передать $scope из дочернего контроллера?

View:
<div ng-controller="ParentCtrl">
    <div ng-controller="ChildCtrl">
        <input type="text" ng-model="myText">
    </div>
    <button ng-click="click()">Click</button>
</div>


Controller:
angular.module('app', [])
    .controller('ParentCtrl', [$scope, ParentCtrl])
    .controller('ChildCtrl', [$scope, ChildCtrl]);

function ParentCtrl($scope) {
  $scope.name = {title: ''};

  $scope.click = function() {
    console.log($scope.name);
  }
}

function ChildCtrl($scope) {
  $scope.$parent.name.title = $scope.myText;
}


Если в дочернем контроллере явно переопределяю $scope.$parent.name.title = 'Test' - все работает, а когда меняю значение в input'e, то изменений не следует.
Как правильно решить данную задачу? Может необходимо идти иным способом? Прошу Вашего мнения, господа!
  • Вопрос задан
  • 218 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Как правильно решить данную задачу?


Не используйте $scope вообще. Вот вообще. Не инджектите его в контроллеры, и тем более в сервисы. Единственное место где это должно быть - link директив, которые работают с DOM (и то для простых проектов даже это не нужно делать, ибо директивы-примитивы вроде ngHide/ngIf покрывают большую часть кейсов).

Не используйте ngController, вообще. Нынче angular 1.5, используйте компоненты и биндинги. Тогда данная задача решается уже при помощи биндингов, наследования скоупов и т.д.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы