AngularJS 1.5.8: передать функцию с аргументами из компонента в контроллер - PullRequest
0 голосов
/ 10 декабря 2018

Извините, если это дубликат чьего-то вопроса, однако я не могу найти решение моей проблемы.

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

Вот код

компонент:

(function () {

    'use strict';

    angular
        .module('app')
        .component('datePicker', {
            template: createTemplate(),
            controllerAs: 'vm',
            bindings: {
                    onSelectDate: '&'
            },
            controller: DatepickerController
        });

        function DatepickerController() {
            var vm = this;
            vm.filterDateFrom = new Date();
            vm.filterDateTo = new Date();

            vm.submitDate = submitDate;

            function submitDate() {
                console.log(vm.filterDateFrom); // here I got dates from and to
                console.log(vm.filterDateTo);
                vm.onSelectDate(vm.filterDateFrom, vm.filterDateTo)
            }
        }
    }

})();

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

<date-picker
      on-select-date="ctrl.submitFilter(from, to)">
</date-picker>

главный контроллер

function submitFilter(from, to) {
    console.log(from, to) // here all arguments are undefined
}

1 Ответ

0 голосов
/ 10 декабря 2018

Используйте объект locals:

app.component('datePicker', {
    template: createTemplate(),
    controllerAs: 'vm',
    bindings: {
            onSelectDate: '&'
    },
    controller: "DatepickerController"
});

app.controller("DatepickerController", function() {
    var vm = this;
    vm.filterDateFrom = new Date();
    vm.filterDateTo = new Date();

    vm.submitDate = submitDate;

    function submitDate() {
        console.log(vm.filterDateFrom); // here I got dates from and to
        console.log(vm.filterDateTo);
        ̶v̶m̶.̶o̶n̶S̶e̶l̶e̶c̶t̶D̶a̶t̶e̶(̶v̶m̶.̶f̶i̶l̶t̶e̶r̶D̶a̶t̶e̶F̶r̶o̶m̶,̶ ̶v̶m̶.̶f̶i̶l̶t̶e̶r̶D̶a̶t̶e̶T̶o̶)̶ 
        vm.onSelectDate({
           "from": vm.filterDateFrom,
           "to":   vm.filterDateTo
        });
    }
});

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

Для получения дополнительной информации см.

...