Arhn - архитектура программирования

Вызов функции контроллера Angular из директивы

У меня есть пользовательская директива в Angular, которая должна вызывать функцию в контроллере, передавая некоторые данные. Код для контроллера и директивы ниже. В моей директиве, когда я вызываю scope.modify(data);, он вызывает функцию в контроллере, но, похоже, не передает данные (он печатает данные как undefined). Почему это?

В моем контроллере есть функция modify() с некоторой логикой:

$scope['modify'] = function(data) {
    var obj = $scope['template']();
    console.log(data);
    // ... do stuff with data
}

Я вызываю его из своей директивы, которая считывает данные из файла.

app.directive("modifyBtn", function($compile) {
    return {
        restrict: "E",
        scope: {
            modify:"&"
        },
        link: function(scope, element, attrs) {
            var fileElem = angular.element(element.find("#file_input2"));
            var upload = function() {
                var file = fileElem[0].files[0];
                var reader = new FileReader();
                reader.readAsText(file);
                reader.onload = function(e) {

                    var data = {};

                    // read JSON content from file and store as data

                    console.log(data); // prints correct data
                    scope.modify(data);
                }
            };
            $(fileElem).on("change", upload);
        }
    }
});

Наконец, вот моя директива со стороны просмотра в HTML:

<modify-btn modify="modify()">
    <li class="active">
        <span class="btn creation-btn" ng-click="fileshow = true">
            Upload JSON
        </span>
    </li>
    <li>
        <input type="file" id="file_input2" ng-show="fileshow" />
    </li>
</modify-btn>

Ответы:


1

Выпуск находится в представлении на месте использования. С привязкой & вы предоставляете выражение, которое выполняется в области действия контроллера. И выражение modify(). Обратите внимание на отсутствие аргументов. РЕЗУЛЬТАТ ожидается. Аргумент в функции контроллера не определен. Решение: укажите имя функции только в шаблоне

 <modify-btn modify="modify">
04.08.2015
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..