Динамический контроллер не запускается - PullRequest
0 голосов
/ 17 апреля 2019

Следуя этой теме AngularJS UI router с именем views lazy loading , я хочу иметь множество вкладок, для каждой из которых назначен собственный шаблон и контроллер, например:

angular.module('ppApp').config(function($stateProvider){
    $stateProvider
    .state('portfolio.patent', {
        url: '/:patentId',
        controller: 'mainItemCtrl',
        templateUrl: 'app/templates/patent/main.main-item.tpl.htm'
    }
})

angular.module('ppApp').controller('maintItemCtrl', function(){
    var vm = this;
    vm.leftTabs = {
        'tab1': {
            template: 'app/templates/child.sibling1.tpl.htm',
            controller: 'siblingOneCtrl'
        },
        'tab2': {
            template: 'app/templates/child.sibling2.tpl.htm',
            controller: 'siblingTwoCtrl'
        }
    }

});


<uib-tabset active="active">
    <uib-tab ng-repeat="(tabName,tab) in $ctrl.leftTabs" heading="{{tabName}}">
        <div template={{tab.template}} controller="{{tab.controller}}">Loading {{tabName}} ...</div>
    </uib-tab>
</uib-tabset>

У меня есть контроллеры, настроенные для контроллеров одного уровня, и они работали вплоть до попытки их динамической загрузки во вкладки. Шаблон загружается в представление, хотя контроллеры не вызываются. Если я проверяю исходный код, то в директивах контроллера в качестве значений указаны оба родственных контроллера.

Вопрос

Почему мои контроллеры не запускаются?

1 Ответ

1 голос
/ 21 апреля 2019

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

По крайней мере, в контроллерах директив интерполяция происходит после $postLink, что означает, что к этому моменту все дочерние элементы были связаны, и это слишком поздно в жизненном цикле родителя, чтобы объявить и создать новые дочерние контроллеры.

EDIT: это подтверждается документами:

Функция конструктора контроллера. Контроллер создается перед фазой предварительной компоновки, и к нему могут обращаться другие директивы (см. Атрибут require).

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