A
A
Artem Shchurin2016-02-02 09:40:53
Angular
Artem Shchurin, 2016-02-02 09:40:53

Why does the extra $scope appear?

Good afternoon!
We have a modal window with dynamic content, I wonder why an extra $scope appears between the modal window controller and the content controller

<div class="lightbox" ng-controller="ModalCtrl as ctrl" ng-show="show">
        <div ng-include="tplUrl" class="max-height max-width"></div>
</div>

define(['app'], function(app) {
  app.controller('ModalCtrl', ['$scope', 'outerConfig', function($scope) {
    $scope.$on('modal', function(e, options) {
      $scope.tplUrl = (options.tplUrl || 'app/modal/tpl.html');
$scope.callback = options.callback;
    });
  }]);
});

Что я имею ввиду?
Если мы вызовем $broadcast('modal', options) --> внутри единственного обработчика ModalCtrl заменим tplUrl --> подгрузится новая view, у которой собственный контроллер, назовём NewCtrl, получаем новый $scope унаследованный от ModalCtrl, неожиданностью стало, что внутри контроллера NewCrtl callback который мы положили в $scope ModalCtrl, будет доступен через $scope.$parent.$parent.callback, вместо $scope.$parent.callback
От куда лишний родитель?

Answer the question

In order to leave comments, you need to log in

1 answer(s)
L
lega, 2016-02-02
@schurin

ng-include создаёт дочерний scope (для того чтобы можно было прибить старый дочерний scope когда вы смените шаблон), в Angular Light такой проблемы нет.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question