Объявление глобальной переменной в Angular 6 / Typescript

Это сообщение об ошибке запускается, когда отправляется сообщение перед отправкой заголовков HTTP (с помощью setcookie или header ). Общие причины вывода чего-либо перед заголовками HTTP:

  • Случайные пробелы, часто в начале или в конце файлов, например:
     
    

& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; Чтобы избежать этого, просто оставьте закрытие ?> - это не обязательно. g2] в начале файла php. Изучите ваши php-файлы с помощью шестнадцатеричного редактора, чтобы узнать, так ли это. Они должны начинаться с байтов 3F 3C. Вы можете безопасно удалить спецификацию EF BB BF с начала файлов.

  • Явный вывод, например вызовы echo, printf, readfile, passthru, код до и т. д.
  • Предупреждение, выданное php, если установлено свойство display_errors php.ini. Вместо того, чтобы сбой при ошибке программиста, php молча фиксирует ошибку и выдает предупреждение. Хотя вы можете изменить конфигурации display_errors или error_reporting , вы должны скорее исправить эту проблему. Основными причинами являются доступ к неопределенным элементам массива (например, $_POST['input'] без использования empty или isset , чтобы проверить, установлен ли вход) или используя неопределенная константа вместо строкового литерала (как в $_POST[input], обратите внимание на недостающие кавычки).
  • Включение буферизации вывода должно устранить проблему; все выходные данные после вызова ob_start буферизуются в памяти до тех пор, пока вы не отпустите буфер, например. с ob_end_flush .

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

    0
    задан Philip L 5 March 2019 в 16:30
    поделиться

    1 ответ

    С модулями JavaScript (также называемыми «ESM» для модуля ECMAScript), которые теперь использует TypeScript, импорт представляет собой только для чтения представление экспорта, поэтому вы не можете писать в diffMode снаружи модуля, в котором он определен.

    Если вам нужно написать в него из другого модуля, вы можете выставить функцию для установки ее значения вместо:

    'use strict';
    export var diffMode : boolean = false;
    export function setDiffMode(flag: boolean) {
        diffMode = flag;
    }
    

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

    Живой пример (в JavaScript, но это не имеет значения) на плункере (фрагменты стека не позволяют модули, к сожалению).

    main.js:

    const handle = setInterval(() => {
        const p = document.createElement("p");
        p.appendChild(
            document.createTextNode(`diffMode = ${diffMode}`)
        );
        document.body.appendChild(p);
    }, 250);
    setTimeout(() => {
        clearInterval(handle);
    }, 1000);
    
    export var diffMode = false;
    export function setDiffMode(flag) {
        diffMode = flag;
    }
    

    othermod.js:

    import {diffMode, setDiffMode} from "./main.js";
    
    setTimeout(() => {
        setDiffMode(true);
    }, 500);
    

    Если вы выполните это, вы увидите, что изменение othermod.js в diffMode делает случись и получи наблюдение по коду main.js.


    Примечание: модули всегда находятся в строгом режиме, поэтому вам не нужен 'use strict'; вверху.

    0
    ответ дан T.J. Crowder 5 March 2019 в 16:30
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: