Расширяющий контроллер имеет неопределенную форму при отправке - PullRequest
0 голосов
/ 17 сентября 2018

Хорошо, у меня есть главный контроллер и другой, где я расширяю основной (для отображения другого макета).

Основной контроллер:

function CustomerInformationController(...) {
    var vm = this;
    ...

    vm.save = function() {
        if (angular.isDefined(vm.guestAccountForm)) {
            ...
        }
        ...

Основной шаблон:

<div ng-controller="CustomerInformationController as customerInformation" class="customer-information">
    <form name="customerInformation.guestAccountForm">
    ...
    </form>
</div>

Контроллер расширения:

function CustomerInformationControllerExtent($controller, $scope) {
    var vm = this;

    // Extend Product Controller.
    angular.extend(this, $controller('CustomerInformationController', { $scope: $scope }));

Расширение шаблона (я хочу изменить этот шаблон и переопределить его):

<div ng-controller="CustomerInformationControllerExtent as customerInformation" class="customer-information">
    <form name="customerInformation.guestAccountForm">
    ...
    </form>
</div>

Когда я использую толькоосновной элемент управления все в порядке, но в расширении контроллера, когда я пытаюсь проверить правильность формы, vm.guestAccountForm не определено.

НО, когда я пытаюсь с this (this.guestAccountForm)все в порядке.

Я что-то упустил с функцией расширения?

1 Ответ

0 голосов
/ 17 сентября 2018

Одним из подходов является внедрение объекта vm как локального:

function CustomerInformationControllerExtent($controller, $scope) {
    var vm = this;

    // Extend Product Controller.
    angular.extend(this, $controller('CustomerInformationController', { vm  vm}));

Затем используйте введенный объект vm:

function CustomerInformationController(vm) {
    ̶v̶a̶r̶ ̶v̶m̶ ̶=̶ ̶t̶h̶i̶s̶;̶
    ...

    vm.save = function() {
        if (angular.isDefined(vm.guestAccountForm)) {
            ...
        }
        ...

Объект this объекта xController отличается от объекта this контроллера xControllerExtent. Вот почему angular.extend используется. Копирует свойства из одного this объекта в другой.

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

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