Отмена привязки EventListener при изменении состояния $ (пользовательский интерфейс)

Я согласен с @MihaiIorga в комментариях - используйте скрипт PHPMailer. Похоже, вы отклоняете его, потому что вам нужен более простой вариант. Поверьте мне, PHPMailer - это более простой вариант с очень большой разницей по сравнению с попыткой сделать это самостоятельно с помощью встроенной функции PHP mail(). Функция mail() на PHP действительно не очень хороша.

Чтобы использовать PHPMailer:

  • Загрузите скрипт PHPMailer отсюда: http://github.com / PHPMailer / PHPMailer
  • Извлеките архив и скопируйте папку сценария в удобное место в вашем проекте.
  • Включите основной файл сценария - require_once('path/to/file/class.phpmailer.php');

Теперь отправка электронных писем с прикрепленными файлами идет от безумно трудно невероятно легко:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

$email = new PHPMailer();
$email->From      = 'you@example.com';
$email->FromName  = 'Your Name';
$email->Subject   = 'Message Subject';
$email->Body      = $bodytext;
$email->AddAddress( 'destinationaddress@example.com' );

$file_to_attach = 'PATH_OF_YOUR_FILE_HERE';

$email->AddAttachment( $file_to_attach , 'NameOfFile.pdf' );

return $email->Send();

Просто одна строка $email->AddAttachment(); - вы не можете просить

Если вы сделаете это с помощью функции PHP mail(), вы будете писать стопки кода, и вам, вероятно, будет очень сложно найти ошибки.

0
задан J. Doe 16 January 2019 в 13:24
поделиться

1 ответ

Всякий раз, когда код передает функцию или объект в API, возникает риск создания ссылок на объекты, что предотвратит сборку мусора. Это может привести к утечке памяти.

Метод $on возвращает функцию, которая может использоваться для отмены привязки обработчика событий:

this.subscribe = function( scope, cb )
{
    var deRegister = {};
    deRegister.ActionChanged = $rootScope.$on('action-changed', cb);
    deRegister.ProjectChanged = $rootScope.$on('project-changed', cb);
    deRegister.FileChanged = $rootScope.$on('file-changed', cb);

    scope.$on( '$destroy', function() {
        deRegister.ActionChanged();
        deRegister.ProjectChanged();
        deRegister.FileChanged();
        deRegister = null; //release deRegister object
        scope = null;      //release scope reference
        cb = null;         //release callback function reference
    ));
};

В дополнение к отмене регистрации обработчиков событий, код должен освобождать любые созданные ссылки на объекты. [ 114]

0
ответ дан georgeawg 16 January 2019 в 13:24
поделиться
Другие вопросы по тегам:

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